zoukankan      html  css  js  c++  java
  • 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关键字,进行访问。

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

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

  • 相关阅读:
    黑客入侵美国一家公司夺走1500万美元?Midge建议你一定要知道
    开始使用AngularJS和ASP。NET MVC -第二部分
    MVC Tempdata,查看并保持混乱
    AngularJS ui-router
    仅限OCR图像的PDF文件。
    FxButton类
    WPF图像按钮100%在XAML
    CFlexiButton类
    一个更好的位图按钮类
    COddButton
  • 原文地址:https://www.cnblogs.com/FavoriteMango/p/10718104.html
Copyright © 2011-2022 走看看