一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:
public class A
{
public int Age; //这是不好的,待会有程序员可能把-1赋给Age
}
为了防止乱赋值,C#设计了一个属性机制,要求把成员变量设为私有,在通过属性来控制成员变量的读写,如下:
public class B
{
private int age; //私有成员变量
public int Age //age的属性
{
get{ return age; } //读取器
set{ //写入器
if(value>0)
age = value; //value是准备写入的值
}
}
}
这样Age就像保安一样,挡在age的前面。访问age的时候需要通过Age许可,如下:
B b = new B();
b.Age = -1; //这是不行的,-1被带入value,value<0,判断不成立
b.Age = 10; //这是可行的
C#中的get和set用法
get是用来取值的
set是用来赋值的
如:
namespace MapClassLibrary.Models
{
public class Class1
{
public Class1()
{
}
private string type;
public string Type
{
get { return type; }
set { type = value; }
}
}
}
首先是赋值
Class1 c1=new Class1();
c1.Type="String类型";
然后是取值
string str=c1.Type;
MessageBox.Show(str.ToString());
结果就会输出“String类型”
请问一下你想要的是这种效果吗?
VS 2005 以前的版本
private string _str;
public string Str
{
get
{
return _str;
}
set
{
_str = value;
}
}
Vs 2008 可以按照上面的写,也可以如下
public string Str
{
get; set;
}
无非就是声明一个属性储存值,get 就是得到这个属性的指,有了get之后你才能从Str 里面拿值,有了set 才能为这个Str 赋值,set的那个value是内置的一个变量,指的就是外界传入的值.
public void Test()
{
Str = string.empty;这时string.empty就是那个value,可以看作调用了set方法为Str赋值。
Consloe.write(str);这时就可以看作调用get方法从Str中取值。
}
c#中的set和get是针对C#中专门独有的属性来说的。C#中分字段和属性,字段就是一个私有的数据成员,而属性就是专门为这个字段而设计的,目的就是为了保护数据的私有化。
字段定义:private int i;
属性定义:public int I
{
set
{
i=value;//这个value就是我们所要赋的值,系统自动识别
}
get
{
return i;//要调用I的值,就返回字段i的值
}
}
set就是为字段i赋值,get就是得到字段i的值。但是我们在程序中调用的是I,而不是i,因为只能看见I,看不见i。在set和get语句中还可以加入函数语句。
就是 一个字段的属性 生成器
比如 你的名字 YourName
你可以 定义一个 字段 myname
它的get 和 set 方法就是 读时用 get 写入时用 set
public string MyName
{
set
{
myname = value ; // MyName ="wang ";
}
get
{
return myname; // 返回 myname 这个字段所保存的值
}
}