有大侠见过
class myclass<T> where T : myclass<T>这种定义方式么?泛型T还是myclass<T>,myclass<T> 好像是一层一层嵌套起来的, 就好像myclass<myclass<myclass<....>>>有哪位大侠能解释一下,这个东西是怎么回事啊?能不能给个简单的例子阿? 我困惑好长时间了
多谢了!

解决方案 »

  1.   

    public class myclass<T> where T : myclass<T>
        {
            public myclass()
            {
            }
            public void func(T aa)
            {
                T bb = aa;
                //...其他代码
            }
        }    public class mychild : myclass<mychild>
        {
             //....其他代码
        }
           //调用
                  myclass<mychild> my = new myclass<mychild>();
                mychild child = new mychild();
                my.func(child);
      

  2.   

    class myclass<T> where T : myclass<T> 中的where 只是一个约束,说的是T这个占位符要继承myclass<T>这个类型
      

  3.   

    实际应用的例子看你怎么用了
    例如:
    在定义父类时,父类里要用到子类,而子类的定义是不明确的(即在定义父类时子类尚未定义,子类可能由其他人来定义),而现在父类里又要用到子类,所以只能给个模板T,并且约束这个模板T的类型必须是继承myclass的类;我语言表达能力差,不知道你能看懂不?
      

  4.   

    class myclass<T> where T : myclass<T>
    表示myclass里可以使用一个泛化的类型T,并约束T是自己的子类。
      

  5.   

    好比一个人(man)要给未来的孩子起名字,但是还不知道未来孩子是男孩(boy)还是女孩(girl)
    public class man<T> where T : man<T>
        {
            public 给孩子起名字函数(T 孩子, string 名字)
            {
                孩子.Name=名字;            //...其他代码
            }
        }   //下面两个类可能是别人后定义的
        public class boy: man<boy>
        {
             //....其他代码
              public string Name;
             public void printMyName()
             {
                 Console.WriteLine("man给我起名字是:"+Name);
              }
        }     public class girl: man<girl>
        {
             //....其他代码
              public string Name;         public void printMyName()
             {
                 Console.WriteLine("man给我起名字是:"+Name);
              }
        }       
      

  6.   

    这是.NET2.0增加的“泛型”,找本书看看就行了,很简单的