public class cls { private int book;//定义一个域 public int Book { get { Console.WriteLine("dsf"); return book; } set { Console.WriteLine("aaa"); book = value; } } public static void Main() { cls obj = new cls(); obj.Book = 120; //注意这一句 Console.WriteLine(obj.Book); } 结果是aaa dsf 120 有没有人知道这个结果是怎么出来的??
答:
给你讲讲底层吧,你定义的property 有get set两个块,实际上这两个块会编译成两个方法,你可以认为编译以后有如下定义: public void set_Book(int value){ Console.WriteLine("aaa"); this.book = value; } public int get_Book(){ Console.WriteLine("dsf"); return this.book; } 你所看到的 obj.Book = 120;在编译以后实际上是直接调用的方法如:obj.set_Book(120); 这下你能理解了么? 你执行的几句话顺序是: cls obj = new cls(); obj.set_Book(120); Console.WriteLine(obj.get_Book()); 那么就是按照先后顺序输出Console.WriteLine的内容,没什么好稀奇的。 property的好处是在设计层面上的,虽然这种概念让人困惑,不过如果你学过java,知道java bean里面property的设计是如何完成的,那么你就能感觉到property在C#里面实现的是多么优雅。2.obj.Book = 120; 这句话调用了Set方法,输出了aaa
Console.WriteLine(obj.Book);这句话调用 了Get方法输出dsf,然后又输出了Book的值120