属性:get和set访问器
1.属性的定义
通常属性名的命名使用的是 Pascal 命名法,单词的首字母大写,如果是由多个单词构成,每个单词的首字母大写。属性定义如下:
public 数据类型 属性名
{
get
{
获取属性的语句块;
return 值;
}
set
{
设置属性得到语句块;
}
}
举个例子:
class Student
{
private string code = "N.A";
// 声明类型为 string 的 Code 属性
public string Code
{
get
{
return code;
}
set
{ if String.IsNullOrEmpty(value) {
code = "NULL";}
else{
code = value;
}
}
}
}
通过上面的实例可以看出,在定义字段属性时,属性的作用就是为字段提供 get、set 访问器,由于操作都比较类似,在 C# 语言中可以将属性的定义简化成如下写法。
public string Code{get; set;}
public string Code{get;}="Like"; //只读
public string Code{private get; set;} //只允许当前类访问
VS快速生成属性
2.为什么要使用属性?
如果上述public string Code{get; set;}
直接写成public string code
呢?不一样可以实现访问吗?
区别:`public string code``,系统在分配内存空间时对code属性直接分配内存,之后对code属性的操作也是直接操作内存中code属性所在的这个块;
而public string Code{get; set;}
,系统会先分配一个叫code的private私有的内存空间(此处的code对于类的内部使用,Code对于外部操作使用,要有所区分),之后的读与写的操作都是通过Code这个public的类似于指针的东西来关联code进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。
属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。
3.属性的调用
class ExampleDemo
{
public static void Main()
{
Student s = new Student();
s.Code = "001";
}
}
直接把Code当成类的成员变量一样调用
4.抽象属性
抽象类可拥有抽象属性,这些属性应在派生类中被实现。
//抽象类
public abstract class Person
{
public abstract string Name
{
get;
set;
}
}
//派生类
class Student : Person
{
private string code = "N.A";
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}
}