[英]Subclass of Generic in C#
我在Unity中有一個通用類,當我使用int
類型時,我希望能夠在其中有一個附加變量。
我的通用類Grid<int>
:
public class Grid<T>
{
public T[] array;
}
我試圖用名為Grid<int>
的類擴展通用類Grid<T>
,以便能夠在其中添加變量:
public class Grid<int> : Grid<T>
{
string additionalVariable;
}
但這引發了錯誤
The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)
如何實現創建new Grid<int>
類使我能夠訪問Grid<int>.additionalVariable
,但是new Grid<float>
不會呢?
如果要創建一個具體的類,則應給該類一個唯一的名稱,並在繼承定義中定義type參數。
public class IntGrid : Grid<int>
{
// Yourvariablehere
}
當開發人員“擴展”一個類時,實際上意味着他們正在創建一個新類來擴展現有的類。 例如,要添加一個字符串變量,您可能需要這樣做:
public class Grid<T>
{
public T[] array;
}
public class ExtendedGrid<T> : Grid<T>
{
string additionalVariable;
}
var grid = new Grid<int>();
grid.additionalVariable = "Hello world"; //Error: method does not exist
var extendedGrid = new ExtendedGrid<int>();
extendedGrid.additionaVariable = "Hello world"; //Works
擴展類時,可以選擇將通用類型打開(如上)或關閉(如以下示例所示)。
public class Grid<T>
{
public T[] array;
}
public class ExtendedGrid : Grid<int>
{
string additionalVariable;
}
var extendedGrid = new ExtendedGrid(); //No need to specify int as the type argument
如果您不想修改原始類,但想要向其添加成員,則唯一的選擇是添加擴展方法:
static public class ExtensionMethods
{
public static string GetAdditionalVariable<T>(this Grid<T> source)
{
return "Hello world";
}
}
var grid = new Grid<int>();
var s = grid.GetAdditionalVariable();
不幸的是,沒有擴展字段之類的東西,所以我猜您想要前兩個示例之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.