设计Property时常犯的一个错误(set)

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

属性:在.NET Framework中的CLS支持两种不同的属性(呵呵,看到这里不要以为就是只读get和只写set属性),分别是标量属性和矢量属性。什么意思呢?

标量属性表示单个类的特性,这个属性可以使一个基本值,如int,DateTim,Color,在C#语法中,标量属性不能参数化(Visual Basic .NET除外)。

矢量属性就是我们通常所说的索引器,它表示一个结构,他允许在类上使用像数组那样的语法。

对于他们具体的用法,MSDN有更加详细的说明,我这里只谈谈设计标量属性时,常犯的一个错误

先看看编写Set过程的原则:

定义一个读/写或者只写属性时,需要考虑如何编写Set访问器,最重要的是如何处理非法值,一种方法是抛出一个异常,表示客户代码不能接受非法值。另外,就是在set过程中容错。

对于Property的Set指示器,有如下的简单的代码

public class MyProperty

{

private int nAge;

public MyProperty()

{

}

public int Age

{

get{return nAge;}

set

{

// 如果输入的年龄小于0,就让他等于0

if(nAge <=0)

{

nAge = 0;

}

else

{

nAge = value;

}

}

}

}

你觉得上边的代码有问题吗?

可以用如下的代码测试一下啊

MyProperty aMyProperty = new MyProperty();

aMyProperty.Age = 20; // 或者其他的-100

MessageBox.Show(aMyProperty.Age.ToString()); // 这里总是 0 。

呵呵,上述的代码有一个非常隐蔽的错误。

改正后的代码如下:

set

{

if(value <= 0) //没错,就是这里!

{

nAge = 0;

}

else

{

nAge = value;

}

}

就这样就可以了,另外还可以设计静态属性,或者虚属性!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航