




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#中属性和字段(变量)的区别 相同点:都是类的成员,属性是类的属性,而字段是类色数据成员-不同点:1 属性可进行数据绑定2 属性可通过set和get方法进行数据安全性检验,而字段不行3 属性可进行线程同步public string Name set lock(this) 4 属性可以是抽象的,而字段不行5 属性可以接口的形式表现6 基于属性的索引7 不要直接把字段转化为属性实力与对象:类实例化的过程就是创建一个对象,也就是说实例就是对象;字段:类内部用来存储数据属性:类提供给外部调用时用的可以设置或读取一个值变量:int double bool 等声明的都是变量常量:前面多个 const 成员变量:在类中定义的变量局部变量:在方法中定义的变量字段变量就是对象公布出来和外界交互数据的变量。属性是对一个或多个变量的包装。在Java环境中,属性是通过从对象中暴露出来的Set方法和Get来实现的:public boolean SetPublicString(string val)this.mPublicString = val;public string GetPublicString()return this.mPublicString;而在DotNet当中,总结了以上的Set和Get方法,直接将其定义成了一个暴露属性,通过对这个属性的访问方式不同(取值还是赋值)而采用不同的代码如以下所示的get代码段和set代码段变量的定义public string mPublicString;属性的定义public string PublicStringgetreturn this.mPublicString;setthis.mPublicString = value; 因为可以做到使用不同的代码段,所以在访问的时候可以使用更多的逻辑控制来取到或限制需要的值:public string PublicStringgetif(this.mPublicString.Length10) return this.mPublicString; else return ; set this.mPublicString = value; 以上代码的意思是如果访问PublicString时就去查看mPublicString的长度,如果大于就返回否则就返回空字符串。综上就把字段变量mPublicString包装了起来,并不是直接的面向对象的使用者,达到控制的目的。属性的方法中还能写各种复杂的逻辑,因为属性中set或get的代码块等同于SetPublicString和GetPublicString的方法。主要区别:字段(field):与类或对象相关联的变量,一般访问域为private属性(property):字段的封装,通过访问器(accessor)来进行读写操作,一般为public一般字段的修饰符有:静态字段:static A只读字段:readonly A一般属性的修饰符:virtualabstractoverride举例说明:private System.Int32 _id;public System.Int32 id get return _id; set _id = value; _id就是字段,id就是属性字段,field: public string name; 属性,property: private string _name; public string name getreturn _name; set_name = value; 只有变量没有成员变量,表示函数内部的临时变量属性与成员变量类似,它们都提供数据存储,但属性的功能远比成员变量强大。属性由特殊方法访问。get 和 set 访问器允许在设置或检索属性之后验证属性值、执行其他代码或执行其他任务。而get 和 set 访问器操作的便是字段在C#中: 域: 表示与对象或类相关联的变量,修饰符不论是不是public。(与字段类似) 字段: 表示与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。(与域类似) 属性: 表示域或字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性。域域表示与对象或类相关联的变量,声明格式如下:attributes field-modifiers type variable-declarators; 域的修饰符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修饰符时,由该声明引入的字段为静态字段(static field)。它只标识了一个存储位置。不管创建了多少个类实例,静态字段都只会有一个副本。 当一个字段声明中不含有static修饰符时,由该声明引入的字段为实例字段(instance field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。 在下面的示例中,Color类的每个实例都有r,g,b实例字段的不同副本,但是Black,White,Red,Green和Blue等静态字段只有一个副本: public class Color public static readonly Color Black = new Color(0, 0, 0); public static readonly Color White = new Color(255, 255, 255); public static readonly Color Red = new Color(255, 0, 0); public static readonly Color Green = new Color(0, 255, 0); public static readonly Color Blue = new Color(0, 0, 255); private byte r, g, b; public Color(byte r, byte g, byte b) this.r = r; this.g = g; this.b = b; 如示例所示,通过readonly修饰符声明只读字段。给readonly字段的赋值只能作为声明的组成部分出现,或者在同一类中的实例构造函数或静态构造函数中出现。 属性 为了类的封装性,一般是把字段设为Private, 把属性设为公有来操作字段。 属性(property)是字段的自然扩展,两者都是具有关联类型的命名成员,而且访问字段和属性的语法是相同的。然而,属性与字段不同,不表示存储位置。相反,属性有访问器(accessor),这些访问器指定在它们的值被读取或写入时需执行的语句。 属性的声明类似于字段,不同之处在于属性的声明以定界符之间的get访问器和或set访问器结束,而不是分号。同时包含get访问器和set访问器的属性称为读写属性(read-write property)。只具有get访问器的属性称为只读属性(read-only property)。只具有set访问器的属性称为只写属性(write-only property)。 get访问器相当于一个具有属性类型返回值的无参数方法。除了作为赋值的目标外,当在表达式中引用属性时,会调用该属性的get访问器以计算该属性的值。 set访问器相当于一个具有单个名为value的参数和无返回类型的方法。当一个属性作为赋值的目标,或者作为+或-运算符的操作数被引用时,就会调用set访问器,所传递的自变量将提供新值。 List类声明了两个属性Count和Capacity,依次是只读和只写的。下面是使用这些属性的示例: List names = new List(); names.Capacity = 100; /调用set访问器 int i = names.Count; /调用get访问器 int j = names.Capacity; /调用get访问器 与字段和方法类似,对于实例属性和静态属性,C#两者都支持。静态属性是声明中具有static修饰符,而实例属性则没有。 属性的访问器可以是虚拟的。当属性声明中包含virtual,abstract,override修饰符时,它们将运用到属性访问器。 来自MSDN中的内容:属性与字段 属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。在以下情况下使用属性过程: 1. 需要控制设置或检索值的时间和方式时。 2. 属性有定义完善的一组值需要进行验证时。 3. 设置值导致对象的状态发生某些明显的变化(如 IsVisible 属性)。 4. 设置属性会导致更改其他内部变量或其他属性的值时。 5.必须先执行一组步骤,然后才能设置或检索属性时。在以下情况下使用字段: 1. 值为自验证类型时。例如,如果将 True 或 False 以外的值赋给 Boolean 变量,就会发生错误或自动数据转换。 2. 在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。 3. 属性是 String 数据类型,且对于字符串的大小或值没有任何约束时+字段(域)可以把字段理解为类级别的变量、常量,用以存储该类的实例的相关数据。public class Date private int _year; private int _month; private int _day;大多数情况下字段的访问修饰符均为 private,如果修饰符为 public,那么在类之外都可以访问该字段,但不建议这样做,应该通过属性或方法来访问类中的数据。属性属性将类中的数据暴露给类外。public class Date private int _year; private int _month; private int _day; public int Year get return _year; set _year = value; public int Month get return _month; private set _month = value; public int Day get return _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 属性不可写说明,上述这样设计一个日期类属性的读写可能是不合理的,我们这样做只是为了解释属性的具体用法。再看一个例子。public int PageSize get return _pageSize; set if (value = 0) _pageSize = 20; else _pageSize = value; 这是一个分页类中的页大小属性,表示一页显示多少条记录。可以看到,我们在设置 PageSize 属性值时,如果值小于等于 0,则会以默认值 20 代替。索引public class MyClass public string thisint index get return X + index.ToString(); 使用MyClass mc = new MyClass();MessageBox.Show(mc100);字段(域)可以把字段理解为类级别的变量、常量,用以存储该类的实例的相关数据。public class Date private int _year; private int _month; private int _day;大多数情况下字段的访问修饰符均为 private,如果修饰符为 public,那么在类之外都可以访问该字段,但不建议这样做,应该通过属性或方法来访问类中的数据。属性属性将类中的数据暴露给类外。public class Date private int _year; private int _month; private int _day; public int Year get return _year; set _year = value; public int Month get return _month; private set _month = value; public int Day get return _
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共享宿舍活动策划方案
- 共享棋牌活动方案
- 共富一周年活动方案
- 关于基金活动方案
- 关于妈妈活动方案
- 2025年湖北省华中师大一附中高考英语适应性试卷(5月份)
- 数字经济背景下产教融合的财会人才培养模式
- 开展城市文化遗产资源调查实施方案
- 2024年龙里县人民医院总院招聘真题
- 2024年成都市新都区旃檀小学校招聘教师真题
- 曲阜师范大学基础乐理期末复习题
- 机车高压电器-高压连接器
- ic封装公司运营管理方案
- 软件项目管理 复习题(附参考答案)
- 软件限制策略与u盘病毒防范
- 特种设备安全风险管控清单
- 毕业设计(论文)-zpw-2000a型区间移频自动闭塞系统工程毕业设计管理资料
- 林业地类代码表
- 有机电子学课件
- 我国煤机装备制造业发展现状与展望
- 云南省临沧市永德县茂麻山水库工程项目环评报告
评论
0/150
提交评论