【问题标题】:Creating a function for getting a variable value [duplicate]创建用于获取变量值的函数[重复]
【发布时间】:2013-03-26 16:31:32
【问题描述】:

我应该更喜欢直接从其他类获取变量(int number = something.number;)还是应该使用函数来获取该数字(如下例所示)?有什么区别?

class someclass
{
    private int number;
    public float GetSomething()
    {
        return number;
    }
}
class otherclass
{
    someclass something;
    private void somefunction()
    {
        int number = something.GetSomething();
    }
}

【问题讨论】:

  • 我认为property 是更好的方法
  • 这是一个非常常见的问题。网上有很多关于这个主题的资源。
  • @Servy 我不认为这是重复的;另一个问题是关于属性与字段的;这个问题是关于字段与方法的。不过,我同意搜索这个问题的答案很容易。
  • @feralin 一个属性几乎等同于一个方法,除了很少的细微差别。字段与属性之间的参数几乎都适用于字段与方法。
  • @Servy 我知道属性和方法是相似的,但它们仍然不同(因此,问题也是如此)。无论如何,这个问题是关于字段或方法是否更好;另一个,关于字段和属性之间的区别是什么。 IMO,它们是不同的问题。

标签: c# class function variables


【解决方案1】:

使用字段引用getter方法的区别在于,如果您创建一个您希望“客户端代码”使用的方法,那么您总是可以稍后更改方法代码,客户端将不必更改其代码。如果您使用字段,则客户端必须将其代码从使用该字段更新为使用方法,如果您决定需要,例如在方法中进行验证。因此,简而言之,最好使用 getter 方法 进行 面向未来的测试。然而,在像 C# 这样的语言中,您也可以使用 properties,它行为类似方法看起来像字段,因此您可以拥有最好的两全其美:良好的语法(字段)和面向未来的(方法)。

【讨论】:

    【解决方案2】:

    对于那种类型的数据,你最好使用一个属性:

    class someclass
    {
        private int number;
    
        public int Number 
        {
            get {return number;}
            set {number = value;}
        }
    }
    

    那么你可以在其他任何地方使用 someclass.Number

    【讨论】:

      【解决方案3】:

      直接访问类外部的类变量不是一个好习惯,因此强烈建议使用methods(也包括properties)。 当没有直接访问您的类变量时,其他类可以使用它,并且每当您更改类的内部结构时,您都可以轻松完成。考虑你的班级:

      class someclass
      {
          // it's a field
          private int number;
      
          // it's a property
          public int Number
          {
              get{return this.number;}
          }
      
          //or you can use method
      }
      

      编辑:如果一段时间后您发现最好将number 的类型更改为int?,您可以这样做,因为在课堂之外从来没有人使用number因此,您可以简单地更改数字并以这种方式更改您的属性

      class someclass
      {
          private int? number;
      
          public int Number
          {
              get{return this.number.Value;}
          }
      
          //or you can use method
      }
      

      【讨论】:

      • 如果可以的话,请解释为什么这不是一个好的做法:)。
      【解决方案4】:

      公开字段是不好的做法,因为它没有公开方法或属性那么广泛。例如,您想根据其他字段值更改此字段的计算逻辑。这两种方法都可以实现,但如果您使用方法或属性,实现起来会更容易、更清晰。

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 2018-12-24
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多