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关键字,进行访问。

变量的使用场景:与类或者对象关系不密切,常常在方法或者语句块中使用。

字段和属性是相对于类而言的,而变量相对于方法或者语句块而言,可以再任何地方使用。

原文地址:https://www.cnblogs.com/FavoriteMango/p/10718104.html