一个简单的泛型问题
/// <summary>
/// 实体类
/// </summary>
public class Entity
{
public int ID;
}
/// <summary>
/// 客户类继承实体
/// </summary>
public class Customer : Entity
{
public string Name;
public int age;
}
public class Operate<T> where T : Entity
{
public Operate()
{ }
public void Print()
{
Console.Write("Test");
}
}
public class TestClass
{
public TestClass()
{
//这样赋值是有问题的,因为Entity是基类,Customer是子类,能否通过何种方式进行赋值呢? (问题)
Operate<Entity> O = new Operate<Customer>(); --如何做才能
}
}
[解决办法]
实现不了,除非Entity是一个接口。
[解决办法]
如果想编译过去,很简单,你可以写
public class Operate<T> where T : Entity
{
public Operate()
{ }
public void Print()
{
Console.Write("Test");
}
public static implicit operator Operate<T>(Operate<Customer> obj)
{
return new Operate<T>();
}
}
但是这就说明了c#编译器是多么严谨了。它不知道如何转换(不像javascript那样等到运行时才崩溃),它要求你在编写代码时就明确地写出转换方法才能编译通过。