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#里面实现的是多么优雅。