裏面我有一個索引類:使用一類具有一個索引,一個重寫的成員陣列的訪問
public class SpecialArray<T>
{
public T this[long index]
{
get { return SpecialGetFunction(index) }
set { SpecialSetFunction(index, value); }
}
private void SpecialSetFunction(long index, T value) { ...blah blah... }
private T SpecialGetFunction(long index) { ...blah blah... }
}
我有一個目前在一個數組另一個類:
public class BaseClass<T>
{
private T[] _actual_nodes;
public virtual T[] Nodes
{
get { return _actual_nodes; }
set { _actual_nodes = value; }
}
}
現在我想覆蓋BaseClass<T>
,所以它將使用我的索引類,而不是_actual_nodes
陣列。
public class SomeDerivedClass<T> : BaseClass<T>
{
private SpecialArray<T> _new_nodes_array;
public override T[] Nodes
{
get { return _new_nodes_array; }
set { _new_nodes_array = value; }
}
}
不幸的是,這最後一堂課生成編譯器錯誤,指出它不能隱式地從SpecialArray<T>
類型轉換爲T[]
(反之亦然)
所以我只是不知道如何做了get/set語句使用我的索引類,而不是數組。起初,我想知道是否有引用傳遞給get/set的「節點」的索引?但是,即使有,使用它仍然只允許我設置/設置一個T元素,而不是一個T[]
的數組。
問題:
人對如何我可以使覆蓋T[] Nodes{}
訪問使用我的索引類的get/set值的想法?
更多學術上,爲什麼不是一個索引器,返回/接受一個X類型的變量,IMPLY轉換爲一個X類型的數組?可以以某種方式明確定義這種轉換嗎?
約束:我無法對BaseClass
進行更改。
「因爲數組除了使用索引器之外還可以做其他事情,例如,你可以問一個它的長度。」有趣;那麼,我是否可以從IDontKnowWhatClass派生類ArrayArray,以實現在各方面都像數組一樣實現此功能所需的功能? –
Glurth
@Glurth不,你不能。即使你提供了所有必要的組件(爲了記錄,你實際上不能這樣做),也就是說,你不能像數組那樣實現協變性),編譯器不會有任何方法來驗證你已經實現了所有必要的組件。就像你創建兩個具有相同字段的類一樣,你仍然不能隱式地將一個轉換爲另一個,你需要明確地定義如何將一個轉換爲另一個。 – Servy
Darn,我想把它標記爲答案,它確實提高了Dennis提供的技術性答案,對不起。 – Glurth