【问题标题】:Declare Property in C#在 C# 中声明属性
【发布时间】:2014-05-17 19:24:07
【问题描述】:

什么时候应该使用:

public string User { get; set; }

什么时候:

private string _user;
public string User
{
     get { return _user; }
     set { _user = value; }
}

以及何时:

public string User;

例如,我有 Class 包含 user 属性。 我应该如何决定应该使用我写的哪一个选项?

【问题讨论】:

  • 你的第一个例子无效。
  • 我编辑了,只是写错了。现在有效

标签: c# properties public


【解决方案1】:

作为一般经验法则,只有当您需要在 getter 或 setter 中执行其他操作时,您才应该真正使用带有支持字段的属性 - 验证某些输入、更改其他状态或引发属性更改通知,例如:

private string _user;
public string User
{
    get { return _user; }
    set
    {
        _user = value;
        this.RaisePropertyChanged(x => x.User);
    }
}

否则,您可以只使用自动属性:

public string User { get; set; }

您不需要支持 _user 字段。

就个人而言,我会避免在类中使用公共变量。

【讨论】:

  • "您不需要支持 _user 字段。" - - > 这只是书写错误。而且我没有理解这一行:` this.RaisePropertyChanged(x => x.User);`
  • 很好,我是这么认为的。不要太担心RaisePropertyChanged 行,它只是一些可以(并且经常)出现在setter 中的代码示例。它引发了 XAML 绑定侦听的 PropertyChanged 事件,这在 MVVM 模式中很重要。
【解决方案2】:

没有一般规则,如果您在一个团队中,这可能取决于您的团队商定的约定。根据经验,使用 setter 和 getter 可以让您更好地控制可以对属性执行的操作,例如验证输入、格式化输出、引发事件、决定可以私下设置/只读属性,等等

【讨论】:

    【解决方案3】:

    1st (autoproperty) 基本上是做 2nd 的简写形式。 至于用法,它有助于验证输入、引发事件等,例如

    private string _user;
    public string User
    {
        get { return _user; }
        set
        { 
            if(!(value == ""))
                _user = value; 
        }
    }
    

    在任何情况下,建议使用 getter 和 setter。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多