2

示例:我想要一个插入方法的模板。如果声明了类sealed,那么我希望声明方法private。如果该类不是sealed,那么我希望声明该方法protected virtual

另一个例子。如果类是继承的,并且超类包含一个方法X,则调用,base.X();否则什么也不做。

ReSharper 中是否提供这种类型的条件处理?我想这已经接近 T4 领域,但能够在 Live Templates 中做到这一点真的很方便。

以防万一,我使用的是 R# 7。

详细场景

这两个要求都来自尝试为 IDisposable 模式编写实时模板(请参阅正确实现 Disposable 模式)。生成的代码需要根据类是基类还是子类而有所不同。可以定义两个模板,但不难想象其他有用的场景。这是我的 IDisposable 模板中的代码:

#region IDisposable Pattern
    /// <summary>
    ///   Finalizes this instance (called prior to garbage collection by the CLR)
    /// </summary>
    ~$ClassName$() {
    Dispose(fromUserCode: false);
    }

public void Dispose()
{
    Dispose(fromUserCode: true);
    GC.SuppressFinalize(this);
}

private bool disposed = false;

// Declare as private if this class is sealed.
protected virtual void Dispose(bool fromUserCode)
{
    if (!disposed)
    {
        if (fromUserCode)
        {
            // ToDo - Dispose managed resources (call Dispose() on any owned objects).
            // Do not dispose of any objects that may be referenced elsewhere.
        }

        // ToDo - Release unmanaged resources here, if necessary.
    }
    disposed = true;

    // ToDo: Call the base class's Dispose(Boolean) method, if available.
    // base.Dispose(fromUserCode);
}
#endregion
4

1 回答 1

3

你当然可以做到这一点。您需要的是一个插件,它实现了执行实际检查的相应实时模板宏。

于 2012-08-26T21:12:36.520 回答