代码之家  ›  专栏  ›  技术社区  ›  Muhammad Ahsen Haider

封装:Getter返回了什么?

  •  -1
  • Muhammad Ahsen Haider  · 技术社区  · 10 年前

    在封装中,get是只读的,而set是只读的

    为什么不使用特殊成员函数时我的输出是11110?

    代码:

    class practice_4
    {
        static void Main(string[] args)
        {
            example ABC = new example();
           // ABC.Roll_ = 11;
            Console.WriteLine(ABC.Roll_ );
            Console.ReadLine();
    
        }
    }
     class example
    {
       private int roll  = 11110;
       public int Roll_
       {
           get
           {
               return roll ;
           }
           //set{
           //    if (value > 10)
           //    { roll = value; }
           //    else
           //    { Console.WriteLine("error"); }
    
           //}
       }
       //public example()
       //{
       //    roll = 110;
       //}
    
    }
    

    输出:

    11110

    但当我使用特殊的成员函数:public example()时

    class practice_4
    {
        static void Main(string[] args)
        {
            example ABC = new example();
    
            Console.WriteLine(ABC.Roll_ );
            Console.ReadLine();
    
        }
    }
     class example
    {
       private int roll  = 11110;
       public int Roll_
       {
           get
           {
               return roll ;
           }
    
       }
       public example()
       {
           roll = 110;
       }
    
    }
    

    因此它显示输出:

    110

    并丢弃11110

    2 回复  |  直到 10 年前
        1
  •  1
  •   Preet Singh    10 年前

    回答您的问题 “不使用特殊成员函数时,为什么我的输出是11110?”

    类中的特殊成员函数是 施工单位 对于类,这意味着这是一个从类定义初始化/构造对象的特殊函数,这里要记住的规则是,构造函数在私有变量语句之后调用,并且当构造函数完成时,构造完成,这意味着您的类的内部状态(变量)现在被赋值(除其他外)。

    但是,如果您初始化私有变量 private int roll = 11110; 行,该行在调用构造函数之前执行。但是当您覆盖roll-in构造函数的值时,私有变量的值会被覆盖。

        2
  •  0
  •   lamorach    10 年前

    在示例类中,您调用的是roll变量而不是roll_属性。如果您尝试设置Roll_,则会出现编译时错误,说明您不能修改只读属性。封装的目的是防止外部世界直接修改值,但它并没有阻止类修改值。