版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#中属性和字段(变量)的区别 相同点:都是类的成员,属性是类的属性,而字段是类色数据成员-不同点:1 属性可进行数据绑定2 属性可通过set和get方法进行数据安全性检验,而字段不行3 属性可进行线程同步public string Name set lock(this &
2、#160; 4 属性可以是抽象的,而字段不行5 属性可以接口的形式表现6 基于属性的索引7 不要直接把字段转化为属性实力与对象:类实例化的过程就是创建一个对象,也就是说实例就是对象;字段:类内部用来存储数据属性:类提供给外部调用时用的可以设置或读取一个值变量:int double bool 等声明的都是变量常量:前面多个 const 成员变量:在类中定义的变量局部变量:在方法中定义的变量字段变量就是对象公布出来和外界交互数据的变量。属性是对一个或多个变量的包装。在Java环境中,属性是通过从对象中暴露出来的Set方法和Get来实现的:public boolean SetPublic
3、String(string valthis.mPublicString = val;public string GetPublicString(return this.mPublicString;而在DotNet当中,总结了以上的Set和Get方法,直接将其定义成了一个暴露属性,通过对这个属性的访问方式不同(取值还是赋值)而采用不同的代码如以下所示的get代码段和set代码段变量的定义public string mPublicString;属性的定义 public string PublicStrin
4、g getreturn this.mPublicString; setthis.mPublicString = value; 因为可以做到使用不同的代码段,所以在访问的时候可以使用更多的逻辑控制来取到或限制需
5、要的值:public string PublicString get return this.mPublicString; else return "" set
6、 this.mPublicString = value; 以上代码的意思是如果访问PublicString时就去查看mPublicString的长度,如果大于就返回否则就返回空字符串。综上就把字段变量mPublicString包装了起来,并不是直接的面向对象的使用者,达到控制的目的。属性的方法中还能写各种复杂的逻辑,因为属性中set或get的代码块等同于SetPublicString和GetPublicString的方法。主要区别:字段(field):与类或对象相关联的变量,一般访问域为private属性(property
7、):字段的封装,通过访问器(accessor)来进行读写操作,一般为public一般字段的修饰符有:静态字段:static A只读字段:readonly A一般属性的修饰符:virtualabstractoverride举例说明:private System.Int32 _id;public System.Int32 id get return _id; set _id = value; _id就是字段,id就是属性字段,field:
8、160; public string name; 属性,property: private string _name; public string
9、; name getreturn _name; set_name = value;
10、; 只有变量没有成员变量,表示函数内部的临时变量属性与成员变量类似,它们都提供数据存储,但属性的功能远比成员变量强大。属性由特殊方法访问。get 和 set 访问器允许在设置或检索属性之后验证属性值、执行其他代码或执行其他任务。而get 和 set 访问器操作的便是字段在C#中: 域: &
11、#160; 表示与对象或类相关联的变量,修饰符不论是不是public。(与字段类似) 字段: 表示与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。(与域类似) 属性: 表示域或字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性。域域表示与对象或类相关联的变量,声明格式如下:attributes field-modifiers type variable-declarators;
12、 域的修饰符field-modifiers可以是:new、public、protected、internal、private、static、readonly。实际上,域相当于C+中的简单成员变量。在下面的代码中,类A包含了三个域:公有的X和Y,以及私有的z。class Apublic int x;public string y;private float z;字段 字段是与对象或类相关联的变量。 当一个字段声明中含有static修饰符时,由该声明引入的字段为静态字段(sta
13、tic field)。它只标识了一个存储位置。不管创建了多少个类实例,静态字段都只会有一个副本。 当一个字段声明中不含有static修饰符时,由该声明引入的字段为实例字段(instance field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。 在下面的示例中,Color类的每个实例都有r,g,b实例字段的不同副本,但是Black,White,Red,Green和Blue等静态字段只有一个副本: p
14、ublic class Color public static readonly Color Black = new Color(0, 0, 0;
15、160; public static readonly Color White = new Color(255, 255, 255; public static readonly
16、 Color Red = new Color(255, 0, 0; public static readonly Color Green = new Co
17、lor(0, 255, 0; public static readonly Color Blue = new Color(0, 0, 255;
18、; private byte r, g, b; public Color(byte r, &
19、#160; byte g, byte b this.r = r; this.g
20、 = g; this.b = b; 如示例所示,通过readonly修饰符声明只读字段。给readonly字段的赋值只能作为声明的组成
21、部分出现,或者在同一类中的实例构造函数或静态构造函数中出现。 属性 为了类的封装性,一般是把字段设为Private, 把属性设为公有来操作字段。 属性(property)是字段的自然扩展,两者都是具有关联类型的命名成员,而且访问字段和属性的语法是相同的。然而,属性与字段不同,不表示存储位置。相反,属性有访问器(accessor),这些访问器指定在它们的值被读取或写入时需执行的语句。 属性的声明类似于字段,不同之处在于属性的声明以定界符之间的get访问器和或se
22、t访问器结束,而不是分号。同时包含get访问器和set访问器的属性称为读写属性(read-write property)。只具有get访问器的属性称为只读属性(read-only property)。只具有set访问器的属性称为只写属性(write-only property)。 get访问器相当于一个具有属性类型返回值的无参数方法。除了作为赋值的目标外,当在表达式中引用属性时,会调用该属性的get访问器以计算该属性的值。 set访问器相当于一个具
23、有单个名为value的参数和无返回类型的方法。当一个属性作为赋值的目标,或者作为+或-运算符的操作数被引用时,就会调用set访问器,所传递的自变量将提供新值。 List类声明了两个属性Count和Capacity,依次是只读和只写的。下面是使用这些属性的示例: List names = new List(; names.Capacity = 100;
24、0; /调用set访问器 int i = names.Count;
25、60; /调用get访问器 int j = names.Capacity; /调用get访问器 与字段和方法类似,对于实例属性和静态属性,C#两者都支持。静态属性是声明中具有static修饰符,而实例属性则没有。 &
26、#160; 属性的访问器可以是虚拟的。当属性声明中包含virtual,abstract,override修饰符时,它们将运用到属性访问器。 来自MSDN中的内容:属性与字段 属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。在以下情况下使用属性过程: 1. 需要控制设置或检索值的时间和方式时。 2. 属性有定义完善的一组值需要进行验证时。 3. 设置值导致对象的状态发生某些明显的变化(如 IsVisible 属性)。
27、 4. 设置属性会导致更改其他内部变量或其他属性的值时。 5.必须先执行一组步骤,然后才能设置或检索属性时。在以下情况下使用字段: 1. 值为自验证类型时。例如,如果将 True 或 False 以外的值赋给 Boolean 变量,就会发生错误或自动数据转换。 2. 在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。 3. 属性是 String 数据类型,且对于字符串的大小或值没有任何约束时+字段(域)可以把字段理解为类级别的变量、常量
28、,用以存储该类的实例的相关数据。public class Dateprivate int _year;private int _month;private int _day;大多数情况下字段的访问修饰符均为 private,如果修饰符为 public,那么在类之外都可以访问该字段,但不建议这样做,应该通过属性或方法来访问类中的数据。属性属性将类中的数据暴露给类外。public class Dateprivate int _year;private int _month;private int _day;public int Yeargetreturn _year;set_year = valu
29、e;public int Monthgetreturn _month;private set_month = value;public int Daygetreturn _day;我们给 Date 类定义了三个属性,分别为 Year、Month、Day。get 中使用关键词 return,set 中使用关键词 value。Year 可读可写属性。 Month 也是可读可写属性,但其写权限只限于类内部。 Day 是只读属性。Date date = new Date(;date._year = 2008; /错误,_year 为 privatedate.Yonth = 2008; /正确date.
30、Day = 3; /错误,Day 属性不可写说明,上述这样设计一个日期类属性的读写可能是不合理的,我们这样做只是为了解释属性的具体用法。再看一个例子。public int PageSize get return _pageSize; set if
31、 (value <= 0 _pageSize = 20; else
32、60; _pageSize = value; 这是一个分页类中的页大小属性,表示一页显示多少条记录。可以看到,我们在设置 PageSize 属性值时,如果值小于等于 0,则会以默认值 20 代替。索引public class MyClass public string thisint index
33、 get return "X" + index.ToString(; 使用MyClass mc = new MyClass(;MessageBox.Show(mc100;字段(域)可以把字段理
34、解为类级别的变量、常量,用以存储该类的实例的相关数据。public class Dateprivate int _year;private int _month;private int _day;大多数情况下字段的访问修饰符均为 private,如果修饰符为 public,那么在类之外都可以访问该字段,但不建议这样做,应该通过属性或方法来访问类中的数据。属性属性将类中的数据暴露给类外。public class Dateprivate int _year;private int _month;private int _day;public int Yeargetreturn _year;set_
35、year = value;public int Monthgetreturn _month;private set_month = value;public int Daygetreturn _day;我们给 Date 类定义了三个属性,分别为 Year、Month、Day。get 中使用关键词 return,set 中使用关键词 value。Year 可读可写属性。 Month 也是可读可写属性,但其写权限只限于类内部。 Day 是只读属性。Date date = new Date(;date._year = 2008; /错误,_year 为 privatedate.Yonth = 2008; /正确date.Day = 3; /错误,Day 属性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 3765-2008卡套式管接头技术条件》
- 深度解析(2026)《GBT 3403.2-2013塑料 粉状脲-甲醛和脲三聚氰胺-甲醛模塑料(UF-和UFMF-PMCs) 第2部分:试样制备和性能测定》
- 《JBT 10773-2007牵引电机产品型号编制方法》专题研究报告
- 2026年法考涉外民事关系卷含答案
- 2026高一历史上册第三单元第一次月考含答案及解析
- 《JBT 10518-2015破碎筛分联合设备》专题研究报告
- 2025至2026学年高二生物下册第一次月考含答案及解析
- 湖南中考:历史必考知识点总结
- 湖南高考:语文必考知识点总结
- 湖南高考:英语必考知识点
- 2017年度瓦斯治理技术方案
- 北京市文物局局属事业单位招聘考试真题及答案2022
- 2023学年完整公开课版泥板成型法
- 官兵心理健康档案模版
- GB/T 8834-2006绳索有关物理和机械性能的测定
- 高三化学人教版2016二轮复习专题八 电化学原理
- GB/T 15055-2021冲压件未注公差尺寸极限偏差
- B.2工程项目招标控制价封面(封-2)
- 基础工程连续基础课件
- 真分数和假分数-完整版课件
- 安全隐患整改通知回执单-三联
评论
0/150
提交评论