行远-自迩

导航

C#-之属性(2)

1.   属性结合字段和方法得多个方面,对于对象的用户来说,属性就像字段(这样就可以修改属性值或者访问),对于类的实现者来说,属性包括两个各部分get访问器(用于读取属性)和set访问器(用于设置属性),与字段不同的是属性不会当做变量,故不能够降属性作为ref和out参数传递。                                                                                                    

    public class Property

            {
                private int month = 1;   //Backing store
                public int Month
                 {
                    get
                        {
                            return month;
                        }
                   set
                       {
                            if ((value > 0) && (value < 13))
                              {
                                   month = value;
                               }
                        }
                     }
                 public void ShowMonth()
                 {
                      System.Console.WriteLine(month);
                  }
               }
 
            Property myPro = new Property();
            myPro.ShowMonth();
            myPro.Month = 12;
            myPro.ShowMonth();
            myPro.Month = 13;//修改属性值大于12后,则不会处理(属性set访问器已作出限制)
            myPro.ShowMonth();
            System.Console.ReadKey();
       属性使用私有字段跟踪实际值。 属性的数据的实际位置通常被称为属性的“后备存储”。 属性 使用私有字段作为后备存储,这很常见。 将字段被标记为私有,确保只能通过调用属性来对其进行更改。 
 2.  示例演示如何访问由派生类中同名的另一属性隐藏的基类中的属性。
 public class Employee
    {
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public virtual void showBase()
        {
            System.Console.WriteLine(name);
        }
    }

//有意(new)隐藏了基类中的属性
    public class Manger: Employee
    {
        private string name;
        public new string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value + ": manger";
            }
        }
        public new void showBase()
        {
            System.Console.WriteLine(name);
        }
    }
}
            //验证派生类如何隐藏基类中属性,注意和重写的区别,参考C#之隐藏与重写
            Manger mag = new Manger();
            mag.Name = "John";
            mag.showBase();
            ((Employee)mag).Name = "Lucy";
            ((Employee)mag).showBase();
 
 结果:
John: manger
Lucy
 
 
 
 
 
 

posted on 2019-01-15 16:05  行远-自迩  阅读(233)  评论(0编辑  收藏  举报