zoukankan      html  css  js  c++  java
  • 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
     
     
     
     
     
     
  • 相关阅读:
    Leetcode 118:Pascal's Triangle 杨辉三角
    Leetcode 498:对角线遍历Diagonal Traverse(python3、java)
    Leetcode加一 (java、python3)
    Leetcode747至少是其他数字两倍的最大数
    python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)
    杭电oj1717——小数化分数(java实现)
    杭电oj_1713——相遇周期(java实现)
    杭电oj1995——汉诺塔V(java实现)
    杭电oj 2098——分拆素数和(包含如何判断质数及优化),java实现
    杭电oj————2057(java)
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/10272428.html
Copyright © 2011-2022 走看看