2

例:メソッドを挿入するテンプレートが欲しいのですが。クラスが宣言されている場合はsealed、メソッドを宣言したいと思いprivateます。クラスがではない場合はsealed、メソッドを宣言したいと思いprotected virtualます。

もう一つの例。クラスが継承され、スーパークラスにメソッドが含まれている場合はX、それbase.X();以外の場合は何もしません。

このタイプの条件付き処理はReSharperで利用できますか?これはT4の領域に近づいていると思いますが、ライブテンプレートでこれを実行できると非常に便利です。

重要な場合は、R#7を使用しています。

詳細なシナリオ

これらの要件は両方とも、IDisposableパターンのライブテンプレートを作成しようとしたことによるものです(Disposableパターンの正しい実装を参照)。生成されるコードは、クラスが基本クラスであるかサブクラスであるかによって異なる必要があります。2つのテンプレートを定義できますが、これが役立つ他のシナリオを思いつくことは難しくありません。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 に答える