我有一个基本的测试控制台应用程序,其中包含以下属性:
public static string testString { get{ } set{ } }
我想使用属性进行一种单独的设置,如果属性值为null,我初始化属性并返回属性值。如果它不为null,则返回当前属性值。
除了不好的做法之外,这可能不使用额外的变量吗?
尝试使用传统方法检查get {}中属性的值当然会创建一个stackoverflow异常。我认为每次尝试检查null时,它只是再次使用getter并陷入无限循环。
答案 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;
}
}
添加私人字段可以满足您的需求。虽然这可能看起来像一个额外的变量,但这是您的应用程序编译时实际发生的情况。不失优化或性能。