是否有可能在该属性的getter中获取属性值?

时间:2014-08-14 03:09:00

标签: c#

我有一个基本的测试控制台应用程序,其中包含以下属性:

public static string testString { get{ } set{ } }

我想使用属性进行一种单独的设置,如果属性值为null,我初始化属性并返回属性值。如果它不为null,则返回当前属性值。

除了不好的做法之外,这可能不使用额外的变量吗?

尝试使用传统方法检查get {}中属性的值当然会创建一个stackoverflow异常。我认为每次尝试检查null时,它只是再次使用getter并陷入无限循环。

2 个答案:

答案 0 :(得分:2)

Properties只是getter / setter方法的语法糖。因此,它们背后没有内置存储。

  

属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。

因此您必须创建一个字段左右。

(还有auto-implemented properties,编译器会自动为其创建backer字段。但是无论如何你都无法直接访问这些字段。)

答案 1 :(得分:2)

是的,这很有可能:

private static string _testString;

public static string testString { 
   get
   { 
     return _testString = _testString ?? "MyDefaultValue";
   } 
   set
   { 
     _testString = value;
   } 
}

添加私人字段可以满足您的需求。虽然这可能看起来像一个额外的变量,但这是您的应用程序编译时实际发生的情况。不失优化或性能。