在面向对象编程中,用户只需要知道对象(object)能做什么,而不需要知道其如何完成的,也就是说不允许访问其内部,这体现了面向对象的封装原则。
面向对象的3个基本原则:
封装(Encapsulation)
多态(Polymorphism)
继承(Inheritance)
一般来说,域(field)是私有的,域表示存储位置,域的类型可以是C#中的任何数据类型。在C#中,属性(property)是这样一种语言元素,它们在被访问的时候看起来好像是数据成员,但是它们却是用方法实现的,因为属性不表示存储位置,这是属性和域的根本性的区别。一般的命名习惯 field: _xxx 对应的属性: xxx.。狭义区分一下,Get和Set实现的称为属性,其他的变量称为数据成员。
对所有有必要在类外可见的域,C#推荐采用属性来表达。属性提供了只读(get),只写(set),读写(get和set)三种接口操作。对域的这三种操作,必须在同一个属性名下声明,而不可以将它们分离。
public class MyClass{
private string _myField;
public string MyField{
get{ return _myField; }
set{ _myField = value; }
}
}
上例中_myField就是域,MyField就是属性。这里的value是C#的关键字,是我们进行属性操作时的set的隐含参数,也就是我们在执行属性写操作时的赋的值。value和字段使用相同的数据类型。get 和 set 会在相应的时候自动调用 ,主要是为了隐藏程序内的数据结构时用 ,get是获取该属性的值,set设置该属性的值。
当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。程序是如何判别应该调用get还是set的,间接调用get、set方法:对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
为赋值与取值增加控制;保证属性的安全性,不能直接修改域;便于维护,可实现在set访问器中一处更改。当对操作进行更多控制时,属性的真正作用显现出来,如:
private int myInt;
public int myIntProp{
get { return myInt;}
set { if(value >= 0 && value <= 10) myInt = value; }
}
只用赋给属性的值在1~10之间,才会更改myInt。|#|#|
自动属性是C#3.0新语言特性和改进。属性是访问对象状态的首选方式,因为他们禁止外部代码实现对象内部的数据存储机制。属性还对内部数据的访问事件施加了更多的控制,但是,一般以非常标准的方式属性,即通过一个公共属性来访问一个私有成员。其代码非常类似于前面的代码,这是VS重构工具自动生成的。
重构功能肯定加快了键入的速度,C#还为此提供了另一种方式:自动属性。利用自动属性,可以用简化的语法声明属性,C#编译器会自动添加未键入的内容,具体而言,编译器会声明一个用于存储属性的私有字段,并在属性的get和set块中使用该字段,我们无需考虑细节。如:
public int MyIntProp { get; set; }
下面两种代码是等效的:
public class Student
{
public string Name { get; set; }
}
public class Student
{
private string name; // This is the so-called "backing field"
public string Name // This is your property
{
get {return name;}
set {name = value;}
}
在C#6中可以赋初值:public string text { get;set;} = "自动属性";
自动属性没有给get和set块提供实现的代码。这些块的实现代码(和底层的字段)由编译器提供。自动属性的限制是他们必须包含get和set存储器。如果使用上面的方法来设置属性,则不需要先指定字段。如果要使用自动属性的方式来设置属性表示只读属性,直接省略set访问器即可。只读属性可以写成如下形式:
public int Id{get;}=1;
这里相当于将Id属性的值设置成1,并且要以分号结束。但是,在使用自动生成属性的方法时不能省略 get 访问器,如果不允许其他类访问属性值,则可以在 get 访问器前面加上访问修饰符 private,代码如下:
public int Id{private get; set;}
欢迎阅读、分享,转载和使用请注明出处,文章来自三里河之光-风、物、情
社区 |
动态 |
诗文作 |
风 |
物 |
情 |
志 |
景色欣赏 |
链接更多 |
友情链接
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
==区域链接== |
国家工商总局 |
财政部 |
国家发改委 |
统计局 |
建设部 |
中国地质调查 |
中国科学院 |
资助账号: | 621226020008 9191221 |
资助说明 | 进入 |
中华人民共和国 |