C#中的字段与属性详解.NET中的字段与属性详解_1

一个类中需要有描述这个类信息的数据,而存储这些数据的变量就成为字段。

创新互联拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站设计制作、网站设计、网站维护、重庆服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城网站建设、政府网站等各类型客户群体,为全球数千家企业提供全方位网站维护、服务器维护解决方案。

字段默认的访问级别为private(只有本类可以直接访问),我们将其访问级别改为public,在其他类中就可以访问了。

字段和属性表示对象包含的信息,字段类似于变量,因为可以直接读取或设置他们。

属性是对字段的封装。属性可以对字段的访问进行控制,可以进行非法设置值的判断。属性并不存储数据,字段存储数据。

封装后,有一些字段我只能赋值,不能读取,有些只能读取,不能赋值,而且可以对传过来的值进行选择。

建议所有的字段不要写成public级别,为字段设置属性,符合面向对象封装的原则。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 属性
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
    class Person
    {
        //string _name;            //字段 姓名  字段的默认访问级别为 private(只能在本类中调用)
        //public string Name       //属性  对字段_name进行封装
        //{
        //    get
        //    {
        //        return _name;
        //    }
        //    set
        //    {
        //        _name = value;
        //    }
        //}

        public string Name    //这是自动实现的属性 方便快捷生成属性 相当于以上注释的代码
        {
            get;              //当写自动实现的属性时,get和set两个都不能省
            set;
        }

        private int _age;       //字段 年龄
        public int Age          //属性
        {
            get { return _age; }
            set
            {
                if (value < 0)         //年龄是大于0的
                {
                    _age = 18;        //如果用户使用非法值,将年龄默认设置为18岁
                }
                else
                {
                    _age = value;
                }
            }
        } 
        public char Gender;         //字段 性别  访问级别为public 在其他类中可以直接访问


        private DateTime birthdate;
        //字段 生日 该字段的访问级别为private,我要想在其他类中使用该字段,只好使用方法

        public DateTime GetBirthdate()   //这里的方法相当于属性中的get
        {
            return birthdate;
        }

        public void SetBirthdate(DateTime value)   //这里的方法相当于属性中的set
        {
            birthdate = value;
        }

        //所谓属性就是绑定了字段的两个方法
        //当我们在属性中不写 get访问体时,该字段就是只写,不写set访问体时,该字段就是只读。
    }
}


惯用法:属性开头字母大写,字段开头字母小写。

选中字段  不论是public int age; 或者是private int age; 都可以。选中后按快捷键  ctrl+r,e 弹出封装字段窗口,改改属性名称即可。

 或是选中字段后,鼠标右键选择重构,选择封装字段,改改属性名称即可。

C#中的字段与属性详解 .NET中的字段与属性详解_1

C#中的字段与属性详解 .NET中的字段与属性详解_1

.net3.0之后就有了属性的简写方式

public string Name { get; set; } 

//编译器自动帮我们生成私有字段和set get代码段

//自动实现的属性,get和set都不能省略

//只读属性 public string Name{ get; private set;}

//只写属性 public string Name{ private get; set;}

输入prop  +  再两下tab键    会出现属性的格式,改改返回值,属性名称就可以了。

 C#中的字段与属性详解 .NET中的字段与属性详解_1

按下两下Tab键之后

C#中的字段与属性详解 .NET中的字段与属性详解_1

只需要改改返回值,属性名称就好了。

 

 public string Name { get; set; }     //等同于下面的代码


private string name;

public string Name

{

    set{ this.name = value;}

    get{ return this.name;}

}

 

自动实现的属性,自动实现了属性的访问器,快速生成属性。

当属性只需要单纯的读写访问时使用。另外,有些特别属性也可以快速实现:

只读属性:publicstring Str{ get; private set;}

只写属性:publicstring Str{ private get; set;}

当属性是派生属性或者要做访问控制或需要控制非法值的时候,就不能如此使用了。这个时候需要自己实现访问器:

private int _salary;
public int Salary
{
     get
    {
        //工资不可以随便给别人看,得有权限
        if(Authorization.Check(visitor))
            return _salary;
        throw new NotAuthorizeException();
    }
    set
    {
        //工资是大于零的
        if(value > 0)
        {
            _salary = value;
        }
        else
        {
           //提示错误
        }
    }
}





新闻标题:C#中的字段与属性详解.NET中的字段与属性详解_1
网页地址:http://myzitong.com/article/pshdse.html