我在Unity中有一个泛型类,我希望在使用int
类型时可以在其中有一个附加变量。
我的通用类Grid<int>
:
public class Grid<T>
{
public T[] array;
}
我试图用名为Grid<T>
的类扩展通用类Grid<int>
以便能够在其中添加变量:
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>
却不能?
答案 0 :(得分:1)
如果要创建一个具体的类,则应给该类一个唯一的名称,并在继承定义中定义type参数。
public class IntGrid : Grid<int>
{
// Yourvariablehere
}
答案 1 :(得分:1)
当开发人员“扩展”一个类时,实际上意味着他们正在创建一个 new 类来扩展现有的类。例如,要添加一个字符串变量,您可能需要这样:
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();
不幸的是,没有扩展字段之类的东西,所以我猜您想获得前两个示例之一。