【发布时间】:2014-02-08 13:33:16
【问题描述】:
您好,由于涉及的类型,我在设置课程时遇到了一些困难。 这是想法:
A 类有一个私有数组列表,它应该被 B 类的实例填充。 因此,A 类的任何实例都将在 B 类元素的 ArrayList 上。 类 A 具有向其 ArrayList 添加 B 的新实例的功能。更具体地说,在 A.Add 内部,一个新的 B 被实例化、初始化,然后添加到 ArrayList。 B 类是一个非常简单的类:它有一个枚举类型,并且它应该 还包含对外部对象/类或其他的引用。 假设有 * appleClass、peachClass、lemonClass * 类,classB 是fruit 类,class A 是fruitBasket。每次主代码看到一个水果,它应该要求 A 类将它添加到篮子中。这意味着,A.add(thisfruit),但这个水果可能是任何水果类。这反过来意味着我需要一个通用签名来实例化 classB 并将其添加到 A.arraylist。我不知道我是否有任何意义,但我也会尝试提供一些代码来解释我的问题。
class Lemon
{
//....
}
class Apple
{
//....
}
class Peach
{
//....
}
class Fruit
{
public int color;
<T> fruit;///this should be the <T> type depending on the fruit class i am adding
public Fruit(T f, int c){fruit = f; color = c;}
}
class Basket
{
ArrayList FruitArray= new ArrayList();
public void AddFruit<T>(T f,int c )
{
fru = new Fruit(f,c);
FruitArray.Add(fru);
}
}
我应该如何使用模板?我知道上面的代码是错误的,但我不知道如何最好地做到这一点。
谢谢
亚历克斯
编辑 谢谢大家的答案。他们似乎都指向使用基/抽象类 Fruit,并从中派生特定的水果。很遗憾地告诉你,我的实际项目不涉及水果,我只是为了简单起见。实际项目在 Unity 中,“水果”的一部分来自 Unity 类,其他一些“水果”是我自己的类。这意味着我不能为来自 Unity 命名空间的那些声明父类。我更希望能够对 "fruit" 进行通用引用,这将是旧 C 中的 void 指针。我知道 C# 是强类型的,并且不允许大多数类似指针的用途,但必须有我一种将“未知”对象引用传递给类/函数并稍后使用/解决它的方法...
【问题讨论】:
标签: c# template-function