• 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
     
     
     
     
     
     
  • 相关阅读:
    bzoj4753: [Jsoi2016]最佳团体(分数规划+树形依赖背包)
    bzoj2956: 模积和(数论)
    51nod 1766 树上的最远点对(线段树)
    bzoj2621: [Usaco2012 Mar]Cows in a Skyscraper(状压DP)
    Codeforces Round #441 Div. 2题解
    bzoj4569: [Scoi2016]萌萌哒(ST表+并查集)
    iOS和Android后台机制对比
    UIApplicationDelegate 各方法回调时机
    iOS OC和JS的交互 javaScriptCore方法封装
    iOS应用的执行原理
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/10272428.html
Copyright © 2020-2023  润新知