如何使用PostSharp替换它:
[WarnIfGetButUninitialized]
public int MyProperty {get; set; }
有了这个:
/// <summary>
/// Property which warns you if its value is fetched before it has been specifically instantiated.
/// </summary>
private bool backingFieldIsPopulated = false;
private int backingField;
public int MyProperty {
get
{
if (backingFieldIsPopulated == false)
{
Console.WriteLine("Error: cannot fetch property before it has been initialized properly.\n");
return 0;
}
return backingField;
}
set {
backingField = value;
backingFieldIsPopulated = true;
}
}
更新
我还应该补充一点,这是提高代码可靠性的好方法。在一个拥有20,000行的项目中,很高兴知道在使用之前所有内容都已正确初始化。我打算将它用于Debug构建,并在Release构建中将其删除,因为 我不想不必要地放慢最终版本。
答案 0 :(得分:1)
来自Gael Fraiteur的PostSharp论坛(感谢Gael!):
您必须使用实现的LocationInterceptionAspect IInstanceScopedAspect。字段'backingFieldIsPopulated'成为 方面的领域。
您可以在此示例中找到灵感:
答案 1 :(得分:1)
你的构造函数如何正确初始化它然后你不必担心它?