【问题标题】:C# - auto-properties VS pre-3.0 properties [duplicate]C# - 自动属性 ​​VS pre-3.0 属性 [重复]
【发布时间】:2015-10-04 19:20:50
【问题描述】:

请问,如果我的问题与代码风格有关,但对于简单的情况,下面哪个更好?

案例 1:

private static int number = 1;
public static int Number
{
    get { return number; }
    set { number = value; }
}

案例 2:

public static int Number
{
    get;
    set;
}

我认为案例 2 更好,因为当您的类中有许多属性时,它们不会占用太多空间并且文件大小会减小。

【问题讨论】:

  • 你为什么要问你知道不是主题的问题(否则“对不起”是为了什么)并且没有显示有关你对该主题的研究的详细信息?至少学习“自动属性”的正确名称会很不错。我建议阅读 serach 的结果 - 即bing.com/search?q=C%23+-+properties+vs.+automatic+properties...
  • 一个小提示:Number 的情况 A 的默认值为 1,而情况 B 的默认值为 0
  • 是的,为了示例,我将其初始化为 1。

标签: c# properties


【解决方案1】:

下面的语法称为auto properties文件大小无关紧要,因为在编译时,无论如何都会生成一个字段看,答案末尾的反编译),两种情况的编译结果中都有getset方法。

自动属性让您的代码更有条理和简短,这有利于您的代码的可维护性和可读性,因此您应该尽可能选择它们

我们将暂时搁置 “在没有自动属性的字段中您可以分配默认值” 主题 (also, it is possible now in auto-properties too in c# 6.0),有时,您想在 @ 中运行更多代码属性的 987654327@ 或 set 方法,例如调用 event 句柄或验证值,这就是标准属性声明出现的地方,例如:

private int mNumber;

public int Number
{
    get
    {
        return Number;
    }
    set
    {
        if (Number == 8)
        {
            throw new CannotReceive8Exception();
        }
        else
        {
            mNumber = value;
        }
    }
}

如果你看这段代码的反编译代码:

public int Number { get; set; }

你会看到编译器无论如何都添加了一个后台私有字段:

【讨论】:

  • 我会小心那个链接,其中一些功能已被删除(主要身体构造函数)。
  • 正如我所说,我的回答忽略了自动属性可能具有也可能不具有该默认值功能的事实。
【解决方案2】:

虽然编译器没有区别,因为它会为您生成字段,但我更愿意让我的代码保持干净并只使用

public int Num {get;set;}

在一行中,因为显式键入代码并将其保留在一行中并没有至高无上的意义,所以我可以将这样的属性与方法区分开来,这些方法一目了然地跨越多行。

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多