定义:属性是面向对象思想里所说的封装在类里面的数据字段,Get,Set方法。
I.普通用法
例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例
private string title;
public string Title
{
get{return title;} //获取这个值
set{title = value;} //设置这个值
}
例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例例
这种形式叫做封装。
在类外部只能调用Title而不能访问title 但是可以通过Title来访问title
这里可以给set里面加入条件
II.晋升用法
在这里get { return age; } 相当于 int get(){return age;}
其实get就是个返回函数 用于返回需要数据
在这里 set 那个也就相当于
void set(int value)
{
if (value < 100 && value > 0)
{
age = value;
}
else
{
age = 18;
}
}
get 和set就是一个为了方便返回和设定的一个简写的函数,其实GET和SET是为了保护好类内的数据变量,可以“有限制地”对数据变量进行赋值和获取,如果不用GET 和SET 也可以根据类名.变量改变类中的数据,不过就把类里面的结构暴露出来了,这样就有可能被别人用内存修改器,改变类中的数据 安全性不够高,如果用GET、SET这样的属性设定工具 就可以有效安全的管理类内的变量
III.扩展用法
get set是用来扩展域的,也就是C里的变量,只是用起来更加灵活而己。看以下代码:
using System;
public class cls
{
private int book;//定义一个域(也可以叫变量,只是面向对像里都这么叫,使用起来也更加方便)
public int Book
{
get
{
Console.WriteLine("dsf");
return book;
}
set
{
Console.WriteLine("aaa");
book = value;
}
}
public static void Main()
{
cls obj = new cls();
obj.Book = 120; //注意这一句
Console.WriteLine(obj.Book);
}
}
运行结果为:
aaa
dsf
120
也就是先把120赋值给value(相当一个存储空间),然后再用get{}返回给Book,实际上也就是一次改变变量值的过程。
那你也许会问为什么要这么复杂呢?因为这是用了嵌套,所以可以更加方便的写入其它语句,在以后你就应该学到了。
如果没有:
obj.Book = 120;
请想一想会是什么结果呢?
只是一个取值过程:get{}而没有执行set{}
结果为:
dsf
0
IV.自动属性
C#3.0对这种常见的写法提供了“自动属性”这一特性:
public class Person
{
public string Name { get; set; }
}
V.集合属性
class MCollection
{
public MessageType this[string type] {
get {
return MessageTypes.Find(n => n.Type.Equals(type, StringComparison.CurrentCultureIgnoreCase));
}
}
}
MCollection m = new MCollection();
MessageType type = m["type1"];