北京理工大学金旭亮老师C#(52—Property)

类的“属性(Property)”

  • 字段+get/set方法=属性

赋值

// 属性的经典实现方法

 public class MyTestClass
        {
            // 私有变量用于存储数据
            private string _myprop="";
            public string Myprop
            {
                get // 读访问器
                {
                    return _myprop;
                }
                set // 写访问器
                {
                    _myprop = value;  // value是一个拥有特殊含义的关键字,代表外界传入的值。
                }
            }
        }

使用

  static void Main(string[] args)
        {
            MyTestClass obj = new MyTestClass();
            // 向属性赋值
            obj.Myprop = "Hello";
            // 读取属性值
            Console.WriteLine(obj.Myprop);
            Console.ReadKey();
        }

实现自定义属性的要点

  1. 定义一个私有字段用于存储属性数据。
  2. 设计一个get方法,当读取属性值时,向外界返回私有字段的当前值。
  3. 设计一个set方法,当向属性赋值时,其自动隐含的value参数保存外界传入的值,应将此值传给前面定义的私有字段。

“属性”经典实现方法弊端

  • 存在的问题:当一个类中存在很多的属性,而这些属性又采用类似的方法编写时,这是一个烦人的工作,要敲很多的代码!

C#3.0的改进——自动实现的属性

 public class MyTestClass
        {
            private string _myprop="";
            public string Myprop
            {
                get;
                set;  
            }
        }

“属性”比“字段”多了哪些东西?

 public class Person
        {
            private int _age = 0;
            public int Age
            {
                get
                {
                    return _age;
                }
                set
                {
                    if (value < 0)
                        _age = 0;
                    else
                        _age = value;
                }
            }
        }
  • 当使用经典写法时,我们可以很容易地在读/写属性时“插入一些”特定的代码,完成诸如“检验数据”、“显示信息”、“触发事件”等工作,这是单纯的字段所不具备的特性。

“属性”的各种“玩法”......

  • 定义一个属性时,get/set方法并不需要同时存在,它们的存取权限也可以不一样,各种情况的不同组合,将影响到属性的存取特性......
// 只读属性
public string ReadOnlyProp
{
    get; 
}

// 只写属性
public string WriteOnlyProp
{
    set     
    {
        _value = value; 
    }
}


// 外界可读,内部可写属性
public string PublicReadPrivateSetProp
{
    get;
    private set;
}


// 直接给定初始值的属性(适用C# 6.0)
public string AutoInitProp
{
    get;
} = "Hello";

开发建议

  • 在实际开发中,多用属性少用字段,尤其是杜绝(“公有(public)”)字段,过多的公有字段,可能会损害代码的可维护性。

猜你喜欢

转载自blog.csdn.net/weixin_42681308/article/details/89366302