C#语言中的属性,把数据(域)和行为(方法)很好地结合到了一起,使得类的编写者可以像编写方法那样,对传入参数进行验证;而类的使用者,则可以向访问域那样访问属性。但更多的时候,我们看到的是这样的代码:
string
name;
public string Name
{
get { return name; }
set { name = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
因此我想,如果能够为这种情况而进行一些语法上的优化器不是能更加“优雅”?比如,允许声明可以由get/set访问其所共享的变量:
public
string
Name
{
string name;
get { return name; }
set { name = value; }
}
{
string name;
get { return name; }
set { name = value; }
}
甚至,连变量都可以不要,而是提供关键字store,由编译器定义一个匿名的变量来存放属性值:
public
string
Name
{
get { return store; }
set { sotre = value; }
}
{
get { return store; }
set { sotre = value; }
}
再甚至,如果属性的代码里没有任何验证或计算代码,只是返回store中的值,或者把值放入store中,还可以使用空访问器:
public
sring Name
{
get {} // 空访问器,由编译器生成诸如return store;这样的代码
set {} // 空访问器,由编译器生成诸如store = value;这样的代码
}
public float P
{
get { return a / b; } // 非空访问器,编译器不生成代码
}
{
get {} // 空访问器,由编译器生成诸如return store;这样的代码
set {} // 空访问器,由编译器生成诸如store = value;这样的代码
}
public float P
{
get { return a / b; } // 非空访问器,编译器不生成代码
}
怎么样?是不是有那么一点意思?