北京理工大学金旭亮老师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)”)字段,过多的公有字段,可能会损害代码的可维护性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值