【问题标题】:What is difference in defining properties in these two methods in c#? [duplicate]在 c# 中定义这两种方法的属性有什么区别? [复制]
【发布时间】:2016-09-26 10:39:54
【问题描述】:

我在采访中遇到了这个问题,在 Class 中定义属性。我知道这是一个非常基本的问题,但想在这里与专家讨论。

Method 1:       
       public string MyProperty { get; set; }

Method 2:
       private string _myProperty;
       public string MyProperty 
       {
           get 
           {
               return _myProperty;
           }
           set
           {
               _myProperty = value;
           }
       }

在方法2中需要声明的额外变量方面性能会更好。

【问题讨论】:

  • 它与指示的链接不完全相同。
  • 我已将重复目标更改为更符合您的问题(尽管原始目标可能已经足够接近,无论如何)。
  • 干杯,有时我们找不到我们真正想要的东西。只有我们需要启动新线程的原因。 :) 无论如何谢谢 Rob

标签: c#


【解决方案1】:

两种方法使用相同数量的变量,在第一个版本中,额外的变量只是被编译器隐藏,如果你反编译代码你会发现它也使用了一个变量。

【讨论】:

  • 我们可以说框架使它抽象吗?
  • 不,abstract 这个词在 C# 中有特殊的含义。该框架使其成为“编译器生成”字段。
【解决方案2】:

方法 1 是一种“较新”的做事方式。它是在 C# 3.0 中引入的。在幕后,它实际上使用了一个私有的后备变量……它只是更整洁。 https://msdn.microsoft.com/en-us/library/bb384054.aspx

只有在您需要从类本身直接访问该变量的情况下,方法 2 可能会执行“更好”。但是两者之间的性能明智,它可能非常微不足道。您不需要通过 setter/getter。

但是,在我看来,方法 1 只是提供了更好的控制流程,保持代码更简洁,并确保您始终通过 setter/getter 而不是直接访问私有变量本身。

【讨论】:

    【解决方案3】:

    方法一是实现它的快速方法,如果不需要进行额外检查,则可以使用该方法。但是,当您想要清理类的输入、使用安全性或只是想确保他的用户必须输入有效的内容时,使用选项二,因为您的所有检查都可以在设置私有变量之前在函数中完成,这可以在代码中很容易取消。

    【讨论】:

    • 在验证输入的情况下,我们可以说最好使用第二个。如果假设属性是自定义类型或集合类型,那么在代码中使用此属性时,我们必须先实例化。我们可以在属性本身中实例化它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2011-03-15
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多