示例:我想要一个插入方法的模板。如果该类声明为sealed
,那么我希望将该方法声明为private
。如果该课程不是sealed
,那么我希望将该方法声明为protected virtual
。
另一个例子。如果该类是继承的,并且超类包含方法X
,则调用base.X();
否则不执行任何操作。
ReSharper中是否提供此类条件处理?我想这已经接近T4领域,但能够在实时模板中做到这一点真的很方便。
如果重要,我正在使用R#7。
这两个要求来自于尝试为IDisposable模式编写实时模板(请参阅Implementing the Disposable Pattern Correctly)。生成的代码需要根据类是基类还是子类而不同。可以定义两个模板,但要想出其他有用的场景并不困难。这是我的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