2

多くの場合、実装をクラスのメンバーに委譲してインターフェイスを実装する必要があります。Visual Studio はインターフェイス メソッドのスタブを生成しますが、実装を委譲するコードを記述する必要があるため、この作業は非常に面倒です。あまり考える必要がないので、おそらくコード生成ツールで自動化できます...

私はおそらくこれを考えた最初の人ではないので、そのようなツールはすでにあるはずですが、Googleで何も見つかりませんでした...何か考えはありますか?


編集:ReSharperでできるようですが、かなり高価です...同じ機能を備えた無料の代替品はありますか?

4

3 に答える 3

2

Resharper を数か月間使用していますが、これを行うための優れた機能があります。

たとえば、次のコードを記述します。

class MyList<T> : IList<T>
{
    private readonly IList<T> _list;
}

にキャレットを置き、+ (Generate Code のショートカット) を_list押して、[Delegating members] を選択します。必要なメンバーを選択すると、R# はそれらの委任メンバーを生成します。AltIns

    public void Add(T item)
    {
        _list.Add(item);
    }

    public void Clear()
    {
        _list.Clear();
    }

    public bool Contains(T item)
    {
        return _list.Contains(item);
    }

    public void CopyTo(T[] array, int arrayIndex)
    {
        _list.CopyTo(array, arrayIndex);
    }

    public bool Remove(T item)
    {
        return _list.Remove(item);
    }

    public int Count
    {
        get { return _list.Count; }
    }

    public bool IsReadOnly
    {
        get { return _list.IsReadOnly; }
    }

    public int IndexOf(T item)
    {
        return _list.IndexOf(item);
    }

    public void Insert(int index, T item)
    {
        _list.Insert(index, item);
    }

    public void RemoveAt(int index)
    {
        _list.RemoveAt(index);
    }

    public T this[int index]
    {
        get { return _list[index]; }
        set { _list[index] = value; }
    }
于 2011-01-16T02:23:31.043 に答える
1

...動的プロキシを参照してください...

でも...

インターフェイスの実装をインスタンス変数またはタイプに委任する機能(typeof(type)のように)は、C#およびVB.Netで非常に必要とされる言語機能です。多重継承がなく、封印された非仮想のメソッドとプロパティが普及しているため、必要な綿毛コードの量は気が遠くなるほどで​​す。

次の言語拡張が機能すると思います...//C#

interface IY_1
{
  int Y1;
  int Y2;
}
...
..
interface IY_n
{
....
..
}


class Y : IY_1, IY_2, ....,IY_n
{
  private readonly Oy_1 Oy_1 = new Oy_1() supports IY_1, IY_2,...etc;   // <<-----
  private readonly Oy_2 Oy_2 = new Oy_2() supports IY_3, IY_8,...etc;
  public int Y2 {...}
}

「supports」キーワード(または「defaults」などの同等のもの)は、名前と署名のインターフェースの通常の名前と署名のマッピングセマンティクスを使用して、1つ以上のインターフェースの実装を「支援」するクラスフィールド値の順序付きリストを識別します。対応。すべてのローカル実装が優先され、同様に、単一のインターフェイスが複数のフィールド値によって実装される場合があります。

于 2010-04-14T15:22:42.097 に答える
1

これを試すことができます: http://www.codeproject.com/KB/codegen/decorators.aspx?display=PrintAll&fid=1532149&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2837870

于 2009-08-14T00:47:12.457 に答える