示例:我想要一个插入方法的模板。如果声明了类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