C#箴言之用属性来访问类的私有成员

C#箴言之用属性来访问类的私有成员,第1张

C#箴言之用属性来访问类的私有成员,第2张

在程序中,访问对象的私有成员是不可避免的。所以这种功能之前有两种实现方式。第一种方法最简单,就是将成员访问器从“private”改为“public”。另一个是提供公共成员访问功能进行访问。现在用C#写程序,不需要用上面说的两种方法,可以直接用属性。

首先,我们来看看这三个方法是如何实现和调用的。这里用一个例子来说明,就是访问“EmployeeInfo”类的私有成员strName,如下表所示。

私有字符串strName访问方法
修改成员访问器修改:
私有字符串strName
是:
公共字符串strName员工信息empNew...;
string strname value = EMP new . strname;
EMP new . strname = " me ";
public成员函数中增加了以下两个成员函数:
public string getname()
{
returnstrname;
}

public void set Name(string Name)
{
strName = Name;
}员工信息empNew...;

string strname value = EMP new . getname();

EMP new . set name(" me ");
将以下属性添加到属性中:
public string name
{
get { returnstrname;}
set { strName = value;}
}
employee info empNew...;
string strname value = EMP new。姓名;
empNew。Name = " me

那么这三种方法有什么区别呢?下表可以更好地说明它们之间的区别。

封装的代码安全性代码复杂度类的代码效率
修改成员访问器破坏了类的封装,这是潜在的危险和简单
公共成员函数不破坏安全性,这是复杂的,间接最低
属性的调用不破坏安全性,这是仅次于第一个方法
(注意:每个子项最差的在这里用红色显示)。

因此可以看出,使用属性不仅不会破坏类的封装性,也不会削弱代码的安全性。此外,它和第一种方法一样简单,但效率略低于第一种方法。但一般来说,在C#中使用属性访问类的私有成员是最好的选择。

但是,对于属性的使用,并且如上表所述,难免有人会有以下疑问。

问题1:属性能否达到和成员函数一样的效果,即完成复杂的代码操作。

事实上,属性的底层实现是借助于成员函数的,但这部分转换是由系统完成的。所以写属性的时候,可以像写成员函数一样,就是可以写在成员函数里的代码片段,完全可以应用在属性里。只需在下面发布由属性转换的微软中间语言(MSIL)代码。

。属性实例字符串名称()
{
。获取实例字符串命名空间。EmployeeInfo::get_Name()
。设置实例void命名空间。employee info::set _ Name(string)
}//employee info::Name属性的结尾

。方法公共hidebysig specialname实例字符串get _ Name()cil managed
{
...
}//employee info::get _ Name方法的结尾

。方法公共hidebysig specialname实例void set _ Name(string ' value ')cil managed
{
...
}//方法EmployeeInfo::set_Name的结尾

就是上面EmployeeInfo类的Name属性转换的中间语言代码(但省略了函数的具体实现代码,因为这里不研究中间语言代码。如果需要进一步了解这部分内容,可以参考中间语言的相关书籍)。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#箴言之用属性来访问类的私有成员

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情