【C#学习】属性/属性访问函数

来源:互联网 发布:小学英语听力软件 编辑:程序博客网 时间:2024/05/22 09:02

为了实现对数据的良好封装,C#为类提供了属性访问函数(简称属性,Property)。属性用于控制对字段的访问。属性包含 set 访问函数和 get 访问函数,分别用于写字段和读字段。

        class A        {            private string name;    // 被控制字段            public string Name      // 属性            {                get { return name; }                set { name = value; }  // value 为隐式参数,由C#提供,表示等于号的右值。            }        }        public static void Main(string[] args)        {            A a = new A();            a.Name = "a";            Console.Write(a.Name);        }
如果属性只有 get 访问函数,则此属性只读,只能作为右值;如果只有 set 方法,则此属性只写,只能作为左值。需要注意的是,如果属性封装的字段本身也是一个复合类型,则只读属性无法限制对这个复合类型对象的成员的修改,因为get会返回这个符合对象的引用,而引用是可能可以修改自己的成员的,但是直接修改引用是不行的,依旧还是只能做右值。比如:

        public class Address        {            public string province;            public string city;         }               public class Person        {            public Person(string province, string city)            {                addr.province = province;                addr.city = city;             }            private Address addr;            public Address Addr            {                get { return addr; }            }        }        public static void Main(string[] args)        {            Person p = new Person("北京", "东城");            p.Addr.province = "上海";            // 合法            // p.Addr = new Address("上海", "浦东"); // 非法        }

自动属性

C# 3.0 开始提供了“自动属性” 的编程方式。允许省去 get set访问函数的函数体以及被封装的字段,取代简单的 get , set 函数。

        public class A        {            public string Name            {                set;get;            }        }        public static void Main(string[] args)        {            A a = new A();            a.Name = "name of a";            Console.Write(a.Name);        }
 需要注意的是,要使用自动属性,必须要求属性是可读写的,也就是必须同时有 set 和 get 访问函数。


原创粉丝点击