として公開する場合はthis.items
として宣言し、外部の呼び出し元が notを追加できるようにします。List<IType>
ICollection<IType>
ITypes
MyTypes
リストのアイテムに対して内部的にこのように動作します
var myObj = this.items[i] as MyType;
if (myObj == null) {
work with this.items[i] and treat it as a IType
} else {
work with myObj which is a MyType
}
また
パブリック プロパティを次のように宣言します。
public ICollection<MyType> Items { get return this.items; } }
したがって、外部呼び出し元はタイプ のアイテムのみを追加できますMyType
。
申し訳ありませんが、条件(2)と(3)を同時に満たすことはできません。
アップデート
もう 1 つのオプションは、getter のみを持つインデクサーを使用して、外部呼び出し元がリストの項目を取得することのみを許可し、項目を追加できないようにすることです。
public IType this[int i]
{
get { return this.items[i]; }
}
外部の呼び出し元は、このようなアイテムにアクセスできます
var obj = new ClassImplementingThisStuff();
int i = 5;
IType x = obj[i];
また、count プロパティを追加します。
public int Count {
get { return this items.Count; }
}
このソリューションは、不要な列挙を回避します。