1

MyObjects の配列へのアクセスをカプセル化する抽象親クラスがあります。

public abstract class MyObjectIterator
{
    public MyObjectIterator(MyObject[] MyObjects) { //constructor }

    public Vector2 [] Coords { //A Get Function }

    public Model[] Params { //A Get Function }

    //THIS ISN'T SAFE! CAN STILL CHANGE MEMBERS OF THE SET
    public MyObject[] MyObjects{ get; protected set; }
}

この子クラスは、別の目的で既に単一のインデックス インデクサーを実装しているため、それを使用して MyObject を返すことはできません。
ただし、配列を返すことは安全でない/悪い習慣であるため、これは内部の要素を変更できることを意味するため、単一の要素にアクセスするためのきちんとしたインターフェイスを提供できる方法を探しています。

MyObject = Child.MyObjects[i];

ただしset、MyObjects の要素へのアクセスは提供しません。

私が持っている関連する質問は次のとおりです。親クラスにインデクサーがある場合、子クラスのオブジェクトがあるときにこれを使用できますか?

編集:私 が望んでいたことを最も達成する
ため、この方法を使用することにしました。
public MyObject MyObject(int index) { return MyObjects[index]; }

4

1 に答える 1

3

探しているものを実現できるReadOnlyCollectionクラスがあります。これは、配列のラッパーとして機能します。ReadOnlyCollection<MyObject> Data { get { return array.AsReadOnly(); } }基になる配列を変更すると、ReadOnlyCollection に影響するようなものを使用します。コレクション自体は比較的軽量であるため、プロパティにアクセスするたびに新しいコレクションを作成するか、プロパティが頻繁に (呼び出しサイトまたはクラス自体内で) アクセスされる場合はキャッシュを使用できます。

2 番目の質問については、答えはイエスです。C# のインデクサーは、むしろプロパティに似ています。プロパティを継承できる場合 (または、インターフェイスなどによって必要な場合)、インデクサーも同様です。

于 2012-06-15T01:47:03.570 に答える