【问题标题】:what is the automatic variable name of an auto-implemented properties什么是自动实现属性的自动变量名
【发布时间】:2011-11-26 05:48:39
【问题描述】:

我正在尝试这样做:

public string LangofUser 
    { 
       get 
       { 
          return string.IsNullOrEmpty("how to get value?") ? "English" : "how to get value?"; 
       } 
       set; 
     }

我必须这样做吗?

string _LangofUser
public string LangofUser 
     { 
       get 
       { 
         return string.IsNullOrEmpty(_LangofUser) ? "English" : _LangofUser; 
       } 
       set { _LangofUser = value};
     }

【问题讨论】:

标签: c#


【解决方案1】:

这种在 C# 中混合使用自动实现和非自动实现的属性是不可能的。属性必须是完全自动实现的或普通属性。

注意:即使使用完全自动实现的属性,也无法以强类型的方式从 C# 源代码中引用支持字段。可以通过反射实现,但这取决于编译器的实现细节。

【讨论】:

    【解决方案2】:

    如果您提供自己的属性实现,它就不再是自动的了。所以是的,您需要创建实例。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      正如其他人所说,不要尝试混合使用自动属性和常规属性。只需编写一个常规属性即可。

      如果您想知道我们在幕后为隐藏的编译器魔法生成了哪些秘密名称,请参阅

      Where to learn about VS debugger 'magic names'

      但不要依赖它;它可以随时随心所欲地改变。

      【讨论】:

        【解决方案5】:

        如果你想保留自动属性并且仍然有一个默认值,为什么不在你的构造函数中初始化它呢?

        public class MyClass
        {
            public MyClass() { LangOfUser = "English"; }
            public string LangOfUser { get; set; }
        }
        

        从 C# 6 开始,您还可以为属性设置默认值,如下所示:

        public class MyClass
        {
            public string LangOfUser { get; set; } = "English";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-28
          • 2011-10-13
          • 2015-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-03
          • 1970-01-01
          相关资源
          最近更新 更多