-4

髪をかきむしっています。どうやら、次のようなことはできないようです

class Ranch<T> : IEnumerable<T>
{
   // Mad code
    IEnumerator<T> GetEnumerator()
    {
        // Hectic implementation details
    }
   // More mad code
}

私はインターネットを検索しましたが、いまいましいものをどこにでも実装する方法の簡単な例が見つかりません。MSDNでさえ。バカバカしい。

キーワードはそこがシンプル。私は、それを行う方法を教えてくれると主張し、その後、不必要で迷惑な他の情報を山ほど持ち込んでいると主張する多くのリンクを見つけました.上記の疑似コードのサイズとスコープ。

4

5 に答える 5

4

インターフェイスを実装するには、継承するインターフェイスIEnumerable<T>も実装する必要があります。IEnumerable

クラス シグネチャのインターフェイスを右クリックして [ Implement Interface ] を選択すると、クラスの最後にスケルトンが追加されます。

class Ranch<T> : IEnumerable<T> {

  ...

  #region IEnumerable<T> Members

  public IEnumerator<T> GetEnumerator() {
    throw new NotImplementedException();
  }

  #endregion

  #region IEnumerable Members

  System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
    throw new NotImplementedException();
  }

  #endregion
}

メソッドは、メソッドIEnumerable.GetEnumeratorを呼び出すだけで実装できます。IEnumerable<T>.GetEnumerator

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
  return GetEnumerator();
}
于 2012-06-22T13:59:31.140 に答える
3

インターフェイスはメソッドIEnumerable<T>を継承し、非表示にします。.net ソースからコピー:IEnumerableGetEnumerator

  public interface IEnumerable<T> : IEnumerable
  {
    IEnumerator<T> GetEnumerator(); // hides IEnumerable.GetEnumerator()
  }

IEnumerable GetEnumerator()非ジェネリック インターフェイス メソッドも明示的に実装する必要があります。

class Ranch<T>: IEnumerable<T>
{
    // Mad code
    IEnumerator<T> GetEnumerator()
    {
        // Hectic implementation details
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
      return GetEnumerator();
    }

   // More mad code
}
于 2012-06-22T13:59:56.163 に答える
2
class Ranch<T> : IEnumerable<T>
{
   // Mad code
    public IEnumerator<T> GetEnumerator()
    {
        for (int i = 0; i < 42; ++i)
            yield return default(T);
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
   // More mad code
}
于 2012-06-22T14:07:01.073 に答える
1

の例Mad CodeですList<T>。クラスを作成してから継承するように指定したらIEnumerable<T>、それをクリックすると、ドロップダウンが表示され、Options to implement interface. それをクリックして選択するImplement interface 'IEnumerable<T>'と、必要なスタブが生成されます。次に、マッドコードを入力するだけです。

class Ranch<T>: IEnumerable<T> // <-- click here in VS
{
    List<T> _madCode = new List<T>(); // Mad code

    IEnumerator<T> GetEnumerator()
    {
        return _madCode.GetEnumerator(); // Hectic implementation details
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
      return GetEnumerator();
    }

   // More mad code
}
于 2012-06-22T14:04:22.737 に答える
1

ienumerableのドキュメントが示すように、カスタム クラスに独自の Enum を実装できます。GetEnumerator()または、メソッド自体を上書きするには、 iterators のドキュメントを参照してください。

メソッドを実装するためのコード例:

public System.Collections.IEnumerator GetEnumerator()
{
    foreach (object obj in underLyingCollection)
    {
        yield return obj;
    }
}

他の人が述べているように、一般的な(上記の)メソッドも実装する必要があります。

于 2012-06-22T14:00:17.393 に答える