C#属性(Property)和字段(Field)的区别
导读:
近期学习过程中发现了⼀些问题,我的学习只是学习,敲代码就是敲代码,没有加⼊思考,也不问为什么就直接去敲⼈家写好的例⼦去敲,
把知识都学死了,逐渐散失了思考能⼒,所以学习的兴趣⼤打折扣,正如那句话—学⽽不思则罔,思⽽不学则殆,在设计模式中偶然看到了属
性和字段,想想之前的C#中也提到过,但是从来没有思索过为什么有属性和字段?下⾯就来详细说明。
【字段】
字段(Field)是⼀种表⽰与对象或类关联的变量的成员,字段声明⽤于引⼊⼀个或多个给定类型的字段。字段是类内部⽤的,private类型
的变量(字段),通常字段写法都是加个"_"符号,然后声明只读属性,字段⽤来储存数据。
【属性】
属性(Property)是另⼀种类型的类成员,定义属性的⽬的是在于便于⼀些私有字段的访问。类提供给外部调⽤时⽤的可以设置或读取⼀个
值,属性则是对字段的封装,将字段和访问⾃⼰字段的⽅法组合在⼀起,提供灵活的机制来读取、编写或计算私有字段的值。属性有⾃⼰的名
称,并且包含get访问器和t访问器。
声明格式:
属性修饰符类型属性名
{
get{
//get访问器代码
}
t{
//t访问器代码
}
}
属性分类:根据get访问器和t访问器是否存在,属性可按下列规则分类。
那么问题来了,既然已经有字段⽤来存储数据,为什么还要引⼊属性来对数据进⾏访问,把声明的字段直接定义成公有的不就可以了吗?
解答:在C#中,我们可以⾮常⾃由的、毫⽆限制的访问公有字段,但在⼀些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要
求字段只能读或只能写,或是在改变字段时能改变对象的其他⼀些状态,这些单靠字段是⽆法做到的,于是就有了属性,属性中包含两个块:
t和get,t块负责属性的写⼊⼯作,get块负责属性的读取⼯作。在两个块中都可以做⼀些其他操作,如在t中验证赋的值是否符合要求并
决定是否进⾏赋值。当缺少其中⼀块时属性就只能读或只能写,t和get块中属性必需有⼀个,因为即不能读⼜不能写的属性是没有意义的。
总之,外部能够访问和修改定义为public的字段,这么做是违反类的安全性设计原则的,所以⼀般的字段都是设为私有的,字段的访问便是由
属性来实现。
C#通过属性特性读取和写⼊字段(成员变量),⽽不直接直接读取和写⼊,以此来提供对类中字段的保护。
【属性VS字段】
【适⽤情况】
公共字段:
1.允许⾃由读写
2.取值范围只收数据类型约束⽽⽆其他任何特定限制;
3.值的变动不需要引发类中其它任何成员的相应变化;
如果均满⾜上述条件,那么我们便可以⼤胆地使⽤公共字段;
属性:
1.要求字段只能读或只能写;
2.需要限定字段的取值范围;
3.在改变⼀个字段的值的时候希望改变对象的其它⼀些状态;
如果满⾜上述条件中的任何⼀个,就应该使⽤属性。
【代码展⽰】
pulicclassUr
{
privatestring_name;//_name为字段
publicstringName//Name为属性,它含有代码块
{
get
{
return_name;//读取(返回_name值)
}
t
{
_name=value;//为_name赋值
}
}
Ur类的私有的字段m_name可以通过公开的属性Name对它进⾏读写操作。通过“属性”读取“字段”值时,将触发get访问器;通过“属
性”为“字段”赋值,将触发t访问器。
【总结】
属性以灵活的⽅式实现了对私有字段的访问,是字段的⾃然扩展,⼀个属性总是与某个字段相关联,字段能⼲的,属性⼀定能⼲,属性能⼲
的,字段不⼀定⼲的了;为了实现对字段的封装,保证字段的安全性,产⽣了属性,其本质是⽅法,暴露在外,可以对私有字段进⾏读写,以
此提供对类中字段的保护,字段中存储数据更安全。
尾⾔:
⽆论是属性还是字段都有它存在的意义,需求多种多样,就产⽣多种多样的对策,属性和字段算是C#中的基础知识,掌握好基础知识,建
造的⾼楼⼤厦才更好的扎实稳固。
本文发布于:2022-12-04 16:11:18,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/51777.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |