C# 字段与属性的区别
在C#中,我们可以非常自由的、毫无限制的访问公有字段,
但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,
或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,
属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。
在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。
当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。
我们先来写一个类Person,字段为:name、age、sex,属性:Name、Age、Sex。那么,成员变量:name、age、sex、Name、Age、Sex。字段和属性,都可以叫做是成员变量。属性和字段都是用来存储数据的,但肯定是有不同的(要不然也不会起两个名字,干脆叫一个名算了~)。
public class Person
{
// 字段
private string name;
private int age;
private string sex;
// 属性
public string Name
{
get { return name; }
set { name= value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
}
字段一般用在类的内部使用,属性一般供外部类访问。按照类的设计原则,字段都是private的,只能在类的内部使用,如果是public的,那么外部类谁都有可能访问,对字段进行破坏性的修改,这是我们不希望看到的,所以字段一定是private的。
属性想当于是给字段加了一个保护套,如果想读这个字段的值,属性里面走的一定是get{},如果想给字段赋值,属性里一定走的是set{},那么程序员可以在get{}和set{}中增加一些限制,验证要赋值的内容,或者让某个字段只能读不能赋值(对应该字段的的属性只让它有get{},不写set{})。对于外部使用者来说只能够使用它,不能控制它,如何控制操作是由类自身决定的(或者说是由程序员决定的,嘿嘿~)。
另外,字段值可以用作ref、out参数,而属性不能。
C# 变量 、字段、属性、方法的区别
string name1;//变量,可以出现在任何需要他的地方
public class MyClass //类
{
public string name2;//字段,成员变量。是变量,只不过在MyClass这个类中,就改叫字段,也可以叫成员变量
private string name3;//私有字段,也是变量,加了private 修饰符的
private string name="";//配合属性来使用
public string Name//属性
{
get {return name;}//get访问器
set {name=value;}//set访问器
}
public string Name_fangfa() //方法
{
return name;
}
}
一句话:字段、属性都是变量,只是为了区分和数据安全设置的。
字段的使用场景:与类或者对象关系密切,建议使用private修饰。
属性的使用场景:对字段进行封装,提供get/set关键字,进行访问。
变量的使用场景:与类或者对象关系不密切,常常在方法或者语句块中使用。
字段和属性是相对于类而言的,而变量相对于方法或者语句块而言,可以再任何地方使用。