我有一個封裝了訪問MyObjects數組的抽象父類:C#繼承索引:另一種
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]; }
因爲它最完成我是想什麼。
請注意,即使集合是隻讀的,仍然可以編輯返回的「MyObject」。如果這是一個問題,你可能想要做一些事情來暴露這些對象的克隆,或者把'MyObject'從一個'class'變成'struct'。 –
海事組織如果決定走這條路線,最好是用索引器而不是方法。它在功能上非常相似,但允許更直接的聲明和獲取。你也可能想實現'IEnumerable'來允許這種迭代。由於'IEnumerable'只指定讀取訪問權限,因此您不必公開任何設置功能。 –
@TimS,我想使用索引器,但因爲子類實現了具有相同參數的索引器,所以父類不能立即訪問。因此,問題(子類有不同的返回類型;如果C#可以基於返回類型重載,那將是美妙的...) – 3Pi