【问题标题】:properties without body [duplicate]没有主体的属性[重复]
【发布时间】:2012-10-09 10:05:26
【问题描述】:

可能重复:
What’s the difference between encapsulating a private member as a property and defining a property without a private member?

在 C# 中,通常当我定义一个属性时,我为 get 和 set 声明并实现一行或多行。例如

public bool IsThere
{
   get { return _isThere; }
   set { _isThere = value;}
}

现在这是什么意思?

public bool IsThere
{
   get;
   set;
}

【问题讨论】:

    标签: c# properties automatic-properties


    【解决方案1】:

    这些是自动属性。它们的工作方式与您的第一个示例相同,但允许您省略不必要的源代码。

    当您的 getter/setter 方法不再存在时,最好使用它们。

    它们还允许您稍后向 getter/setter 方法添加逻辑,而不会破坏任何调用代码(即使您还必须自己实现私有支持属性)。

    【讨论】:

    • 那么就没有区别了吗?
    • @amitkohan - 行为方面,不。
    • @amitkohan 没错;但是,较短的版本仅适用于较新版本的 c#。
    • 不同之处在于您不能访问自动属性的内部支持字段。
    • @OlivierJacot-Descombes:您可以使用反射 ;)
    【解决方案2】:

    这是一个Auto-Implemented Property(自动属性)。

    C# 编译器会自动为 get/set 方法创建一个私有字段成员来读取/写入。


    请注意,自动属性存在一些限制(目前)。例如,您不能使用readonly 之类的修饰符,尽管您仍然可以将其标记为private set,但并不完全相同。

    【讨论】:

    • 看起来像构造函数,如果我们不声明或实现它,编译器会为您创建它。对吗?
    • @amitkohan:是的。只是 C# 编译器的另一个可爱的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-04-13
    • 2017-06-12
    • 2021-07-02
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多