【问题标题】:C# questions private variables [duplicate]C#质疑私有变量[重复]
【发布时间】:2015-06-29 13:23:27
【问题描述】:

只是想确定一下。

公开课产品 { 私人十进制单位价格; 公共 int ID { 获取;放; } 公共字符串代码 { 获取;放; } 公共字符串名称 { 获取;放; } //私有字符串代码; 公开小数单价 { 得到 { 返回单位价格; } 放 { 如果(值 >=0) 单位价格 = 价值; } } }

为什么我们必须将私有变量设置为 unitPrice 才能将值返回给 UnitPrice,是否出于某些原因?

【问题讨论】:

    标签: c# variables private


    【解决方案1】:

    你不会让它private 只是为了返回它的值。 private 是这里的access modifier 之一。它们用于限制代码中特定变量的访问/使用范围。

    private 在这里表示unitPrice 当前可访问或只能由该特定类使用。没有其他外部程序集可以使用此变量。

    如果您想在其他区域访问外部变量,您可以选择将其设为public

    希望这可以清除它。

    【讨论】:

      【解决方案2】:

      从设计的角度来看,单价属性与其他属性完全相同,但是因为它有一个约束。

       if (value >=0)
      

      只有正价是有效的,您别无选择,只能预见房产所基于的私有变量。

      在早期版本的 .NET 中,我们不能这样做:

      public int Id { get; set; }
      

      而且必须一直完整地写出来。上面的符号更方便,它也使代码更清晰。以前是这样的:

      private int _id;
      
      public int Id{
           get{ return _id;}
           set{ _id = value;}
      }
      

      【讨论】:

        【解决方案3】:

        公共属性 UnitPrice 公开给要读取或修改的其他类。但是,作为一个属性,您的类可以对值进行一定程度的控制——例如,您可以验证任何更改。此外,在内部,您可以完全更改获取和修改值的方式,而无需更改类的合同。因此,换句话说,您可以在不影响任何消费者的情况下进行此类更改。

        支持字段 unitPrice 纯粹是一个实现细节,它是由类封装的内部状态。公开此字段意味着您失去了修改值的派生的所有机会,并且您没有验证对值的更改的入口点。属性一开始可能看起来毫无意义的抽象,但它们将有助于使您的代码更易于维护,因为更改可以更容易地限制在单个类中。

        get 和 set 块是纯粹的语法糖,编译器在底层创建了两个方法,称为 get_UnitPrice() 和 set_UnitPrice(x),用于对属性进行读/写操作。您可以只使用类似的方法,但属性更具可读性,并且被设计为与类状态交互的低成本方式,并且方法用于提供行为。

        【讨论】:

          【解决方案4】:

          是的,当您想对变量进行一些控制时,get 和 set 属性很有用。考虑以下情况。

          如果您将变量指定为私有变量,您希望没有人能够访问您的变量。

          但是,如果您希望其他人能够访问您的私有变量,但又不希望其他人更改它。在这种情况下,您可以使用属性

          public class Product
          {
           private decimal price;
           public decimal Price{get{ return price;}}
          }
          

          现在其他人可以访问价格,但他们无法更改

          在您的情况下,您允许其他人获取和设置您的单价,这等于公开访问单价。但是,您允许在一个条件下将单价设置为 0。因此 C# 属性非常适合这种情况。

          希望这会有所帮助!

          【讨论】:

            猜你喜欢
            • 2014-09-27
            • 2014-04-14
            • 1970-01-01
            • 1970-01-01
            • 2013-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多