黑马程序员技术交流社区

标题: 为什么类的内部可以使用这个类来定义变量、属性等 [打印本页]

作者: 何红卫    时间: 2013-4-7 23:42
标题: 为什么类的内部可以使用这个类来定义变量、属性等
本帖最后由 何红卫 于 2013-4-13 23:54 编辑
  1. public class LinkedListNode
  2.     {
  3.         public LinkedListNode prev { get; set; }
  4.         public LinkedListNode next { get; set; }
  5.     }
复制代码
为什么这个类都还在创建的过程中,就可以使用来定义属性了呢,不会陷入一个死循环当中吗,就是想不太明白。


作者: 王溢君    时间: 2013-4-8 00:03
是作为返回值类型吧?
作者: 郑丹丹1990    时间: 2013-4-8 08:33
非简写方式:
  1.   public  class LinkedListNode
  2.     {
  3.         private LinkedListNode prev;

  4.         public LinkedListNode Prev
  5.         {
  6.             get { return prev; }
  7.             set { prev = value; }
  8.         }
  9.         private LinkedListNode next;

  10.         public LinkedListNode Next
  11.         {
  12.             get { return next; }
  13.             set { next = value; }
  14.         }
  15.     }
复制代码
这样看来就不是你所认为的死循环了吧!
实际上是2个变量,prev(属性,私有,不可被其他类访问)
                          Prev(方法,共有,可以被其他类访问)
正是通过方法来得到或设置类的属性的。
希望对您有所帮助。
作者: 张正强    时间: 2013-4-8 10:31
郑丹丹1990 发表于 2013-4-8 08:33
非简写方式:这样看来就不是你所认为的死循环了吧!
实际上是2个变量,prev(属性,私有,不可被其他类访问) ...

prev(字段,私有,不可被其他类访问)
Prev(属性,共有,可以被其他类访问)
方法应该是访问修饰符+返回类型+方法名+参数,例如 pubilc LinkedListNode Prev(string s)
作者: HM朱百青    时间: 2013-4-8 10:52
因为每个类都有默认的无参构造函数,当你再其他的类中创建LinkedListNode这个类的对象的时候,都会先执行默认的无参构造函数,所以当你再给属性赋值的时候,其实你的这个类已经创建好了!你可以调试下试试
  1. static void Main(string[] args)
  2.         {                     
  3.             LinkedListNode l = new LinkedListNode(); //new它的实例
  4.             l.Prev = new LinkedListNode();//给属性赋值            
  5.             Console.ReadKey();
  6.         }

  7. //在LinkedListNode类中将它的默认无参构造函数显示出来
  8. public class LinkedListNode
  9.         {
  10.             private LinkedListNode prev;
  11.             public LinkedListNode Prev
  12.             {
  13.                 get { return prev; }
  14.                 set
  15.                 { Debug.WriteLine("请给我设置值");
  16.                  prev = value;
  17.                 }
  18.             }                       

  19.             public LinkedListNode()
  20.             {
  21.                 Debug.WriteLine("我是构造函数");
  22.             }
  23.         }
复制代码
希望对你有帮助
作者: 严夫    时间: 2013-4-8 11:25
这个是用该类来定义字段的类型吧?
作者: 史鹏飞    时间: 2013-4-8 13:39
public class LinkedListNode
    {
        public LinkedListNode prev { get; set; }
        public LinkedListNode next { get; set; }
    }
‘{}’ 里边的  LinkedListNode 表示 ‘prev’这个字段的类型是 ‘LinkedListNode ’ 这个对象,你没有在里边再次创建这个类,怎么会有死循环呢。
作者: 何红卫    时间: 2013-4-8 18:51
郑丹丹1990 发表于 2013-4-8 08:33
非简写方式:这样看来就不是你所认为的死循环了吧!
实际上是2个变量,prev(属性,私有,不可被其他类访问) ...

我要问的重点不在于属性,而是定义这个属性的类型
作者: 何红卫    时间: 2013-4-8 18:53
史鹏飞 发表于 2013-4-8 13:39
public class LinkedListNode
    {
        public LinkedListNode prev { get; set; }

我问的是这个类都还没创建出来,怎么就可以用来定义别的东西了呢
作者: 何红卫    时间: 2013-4-8 18:58
HM朱百青 发表于 2013-4-8 10:52
因为每个类都有默认的无参构造函数,当你再其他的类中创建LinkedListNode这个类的对象的时候,都会先执行默认 ...

看到你说的我猜定义这个类的时候,类里面的变量、属性等的类型只是作为一个占位符,实际上编译器是不知道这个变量或属性是什么类型,只有在实例化后,也就调用了构造函数后才知道那些变量或属性是什么类型。只要构造函数使用的变量等不是本身类的类型时,就不会陷入死循环。
作者: 郑丹丹1990    时间: 2013-4-8 21:10
何红卫 发表于 2013-4-8 18:51
我要问的重点不在于属性,而是定义这个属性的类型

您是定义单链表这个结构吗???




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2