首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个简单的泛型有关问题

2013-09-12 
一个简单的泛型问题/// summary/// 实体类/// /summarypublic class Entity{public int ID}/// summ

一个简单的泛型问题
   /// <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那样等到运行时才崩溃),它要求你在编写代码时就明确地写出转换方法才能编译通过。

热点排行