| 订阅 | 在线投稿
分享
 
 
 

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

来源:互联网网民  宽屏版  评论
2006-12-16 17:27:47

属性:在.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;

}

}

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

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