如何在初始化之前使用PostSharp来警告属性是否被访问?

时间:2012-01-27 12:59:28

标签: c# .net visual-studio postsharp

如何使用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构建中将其删除,因为 我不想不必要地放慢最终版本。

2 个答案:

答案 0 :(得分:1)

来自Gael Fraiteur的PostSharp论坛(感谢Gael!):

  

您必须使用实现的LocationInterceptionAspect   IInstanceScopedAspect。字段'backingFieldIsPopulated'成为   方面的领域。

     

您可以在此示例中找到灵感:

     

http://doc.sharpcrafters.com/postsharp-2.1/Content.aspx/PostSharp-2.1.chm/html/d3631074-e131-467e-947b-d99f348eb40d.htm

答案 1 :(得分:1)

你的构造函数如何正确初始化它然后你不必担心它?