簡體   English   中英

C#中泛型的子類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM