属性的内部实现其实就是方法
我们平时写的代码:
class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
}
编译器处理之后的代码:
class Student
{
private int age;
//编译器处理之后的代码如下
public void set_Age(int value)
{
age = value;
}
public int get_Age()
{
return age;
}
}
那么对于自动实现的属性呢?
源代码:
class Student
{
//自动实现的属性
public int Age{ get; set; }
}
处理之后:
class Student
{
private int <>_age;//编译器随机生成的字段(存在一些C#不允许作为标识符的字符但CLR却可以,为了不与用户自定义字段冲突)
//编译器处理之后的代码如下
public void set_Age(int value)
{
<>_age = value;
}
public int get_Age()
{
return <>_age;
}
}
到现在你是否真的立即属性的实质了呢?让我们一起来看看下面这个属性吧!
class Student
{
public int Age
{
get{
return Age;
}
set{
Age = value;
}
}
}
属性可以这样写?回答是当然可以,那么如何转化成对应的方法呢?
若果你真的理解了属性的实质,这就完全不是问题了。
class Student
{
public void set_Age(int value)
{
set_Age(value);
}
public int get_Age()
{
return get_Age();
}
}
你会发现这两个方法都是无限递归的死循环,是不是挺有意思的。。。_