读书人

一个简单的泛型有关问题

发布时间: 2013-09-12 22:07:00 作者: rapoo

一个简单的泛型问题
/// <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>(); --如何做才能
}
}



[解决办法]

引用:
Google 协变与逆变


实现不了,除非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那样等到运行时才崩溃),它要求你在编写代码时就明确地写出转换方法才能编译通过。

读书人网 >C#

热点推荐