public class aa
{      private IList<aa>   bb;
      public  IList<aa>   BB
      {
           get {return bb;}
           set {bb = BB;}
      }
}就是在类的定义中用到类作为参数,这叫什么?是递归吗?
谢谢!

解决方案 »

  1.   

    这个是泛型,泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性所谓泛型(generic)是指将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
      泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。C#泛型演示class Stack<T>
    {
        private T[] store;
        private int size
        public Stack()
       {
         store = new T[10];
         size = 0;
    }public void Push(T x)
    {
         store[size++] = x;
    }public void T Pop()
    {
         return store[--size];
    }
    }Stack<int> x = new Stack<int>();
    x.Push(17);
      

  2.   

    泛型就是“类型的函数”,它的结果也还是一个类型。离散数学上这就叫做映射。就好象你计算一个数的立方根,这个函数结果还是一个数。泛型跟它完全一样,只不过规定参数必须是system.Type。.net框架在运行时根据你输入的参数的不同而产生了不同的一个结果类型,例如IList<string>、IList<int>、IList<TextBox>这就产生了三个不同的新类型。在定义时,IList<T>实际上只是定义映射计算的规则。只有在运行时,给出了T的实际参数值,.net才产生了运用这个规则产生了实际的类型代码。记住,不要把参数类型跟泛型结果类型混淆,就不会糊涂了。
      

  3.   

    这个并没有用类自己作为自己内部的参数,privte IList <aa> bb定义了一个bb泛型,类型是类aa,    public  IList <aa>  BB 
          { 
              get {return bb;} 
              set {bb = BB;} 
          } 
    定义了一个BB属性,他返回了一个IList<aa>泛型属性,也就是bb
    实际应用的时候,当你调用aa.BB=value的时候,那么bb的值就是value,当然,value也应该是aa类型的
      

  4.   


    这个时候在概念运用上谈不上什么堆栈概念。系统运行时首先动态产生了 IList<aa> 代码,就好象你手动写了一个新类型的代码(假设起名叫做 IList_with_aa )并且编译到程序里。
      

  5.   

    public class 人类{
      public 人类 父亲;
      public 人类 母亲;
    }人类里面包含人类,
    这样的例子可以理解吗?
    放到泛型上一样的。
      

  6.   

    没有什么“体内体外”,你的思维还停留在解释型语言和面向过程编程的年代,面向对象的类不是你想象的“顺序解释”的...不存在“还没有完成这个类型的定义”这种概念,“没完成的定义”无法通过编译,编辑期间的类跟堆栈还沾不上边...实际上一个属性会被编译为两个方法,IList<aa> get_BB()和void set_BB(IList<aa> value)...在编译后这个类型是确定的...你的问题其实跟泛型无关,你不转换下思维换成如下代码你一样无法理解...建议你去学学编译原理和OOP...public class aa 
    {      private aa  bb; 
          public  aa  BB 
          { 
              get {return bb;} 
              set {bb = BB;} 
          } 
    }
      

  7.   

    已婚的P哥不知会令多少女fans哭断肠子我突然想起了刘天王