C#的class中大量使用属性,如
int speed;
int Speed
{
get{return speed;}
set{speed=value;}
}
本文将探讨以下几个问题
1 为什么要使用属性
2 使用属性带来的好处
关于为什么要使用属性:用于替代原C++或者其它编程语言中的存取器和变异器。
一直以来很多编程语言都是用存取器来实现对私有变量操控,比如SetSpeed()
及GetSpeed()这是两种方法,以前C++的写法是:
int speed;
int MaxSpeed=100;
bool SetSpeed(int s)
{
if(s<=MaxSpeed)
{
speed=s;
return ture;
}
else
return false;
}
int GetSpeed()
{
if(speed>MaxSpeed)
return MaxSpeed;
else
return speed;
}
其实存取器的一个主要目的就是封装好,并做数据效验,而在C#中则可以直接通过
属性来实现同样的功能
int speed;
int MaxSpeed=100;
int Speed
{
set
{
if(s<=MaxSpeed)
{
speed=s;
}
}
get
{
if(speed>MaxSpeed)
{ return MaxSpeed;
else
return speed;
}
}
}
可以看出其实C#中的属性也具备存取器的同样功能,而它编译成MSIL代码后也是一个方法;
使用属性带来的好处
1 为访问对象的内的实例变量及访问另一个对象中的实例变量提供了一致的语法
2 程序员可以节省检查一个实例变量是否为公有或私有,是否存在对此实例变量的存取器方法
3 每个需要被访问的实例变量通常会存在一个存取器,也就是要有Set及Get的方法,而实例的变量只需要一个属性。
另外当调用一个简单的get或set语句块时,编译器会执行特殊的优化,也就是内联(inline)
比如:
car.distance/Speed---->编译器会将此句转换成:car.distance/speed