封装:Getter返回的内容

本文关键字:返回 Getter 封装 | 更新日期: 2023-09-27 18:33:23

在封装中,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

但是当我使用特殊成员函数时:公共示例()

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

封装:Getter返回的内容

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

类中的特殊成员函数是类的构造函数,这意味着

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

但是,如果您像在private int roll = 11110;行中一样初始化私有变量,则此行将在调用构造函数之前执行。 但是,当您覆盖构造函数中的 roll 值时,私有变量的值会被覆盖。

在示例类中,您调用的是 roll 变量而不是 Roll_ 属性。 如果你尝试设置Roll_,你会得到一个编译时错误,指出你无法修改只读属性。 封装的目的是防止外界直接修改值,它不是为了防止类修改值。