我有一个名为CAR的Object声明如下:
public class Car{
public int NumberOfWheels;
}
并使用另一个类我可以检索其三个子类 如下:
public TruckA getCarA(int param){
return new TruckA () {NumberOfWheels = param}
}
public TruckB getCarB(int param){
return new TruckB () {NumberOfWheels = param}
}
public TruckC getCarC(int param){
return new TruckC () {NumberOfWheels = param}
}
如何使用泛型编写?
(我知道这太简单了,我需要一个更复杂案例的例子)
我想创建一个创建新(T)的方法,输入参数并返回它。
类似
public TruckC getCarC(int param){
return getTruck<TruckC>(param)
}
仅限于此:
1. TruckA / B / C没有构造函数
汽车没有建设者。使用{}初始化
3.该方法应仅接收从Car派生的类,以便它可以使用其初始化({})。
(相当于??扩展?在java泛型中的东西)
有可能?
感谢。
答案 0 :(得分:9)
private static T GetTruck<T>(int param) where T : Car, new()
{
return new T() {NumberOfWheels = param} ;
}
答案 1 :(得分:1)
试试这个:
public T getCarC<T>(int param) where T : Car, new()
{
T truck=new T();
truck.NumberOfWheels = param;
return track;
}
泛型是C#2.0最强大的功能。泛型允许您定义类型安全的数据结构,而无需提交实际的数据类型。
从泛型基类派生时,必须提供类型参数而不是基类的泛型类型参数:
public class BaseClass<T>
{...}
public class SubClass : BaseClass<int>
{...}
如果子类是通用的,而不是具体的类型参数,则可以使用子类泛型类型参数作为通用基类的指定类型:
public class SubClass<T> : BaseClass<T>
{...}
使用子类泛型类型参数时,必须重复子类级别的基类级别规定的任何约束。例如,派生约束:
public class BaseClass<T> where T : ISomeInterface
{...}
public class SubClass<T> : BaseClass<T> where T : ISomeInterface
{...}
或构造函数约束:
public class BaseClass<T> where T : new()
{
public T SomeMethod()
{
return new T();
}
}
public class SubClass<T> : BaseClass<T> where T : new()
{...}
答案 2 :(得分:1)
您需要使用泛型类型约束来执行此操作。这些允许您对传递的类型提出要求。
它看起来像这样:
public static T GetCar<T>(int param)
where T : Car, new() // Must inherit from Car, must have a parameterless constructor
{
return new T() { NumberOfWheels = param };
}