Как использовать PostSharp, чтобы предупредить, если свойство получено до того, как оно было инициализировано? - PullRequest
1 голос
/ 27 января 2012

Как бы я использовал 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;
    }
}       

Обновление

Я также должен добавить, что это хороший способ повысить надежность кода. В проекте с 20000 строк приятно знать, что все правильно инициализируется перед использованием. Я собираюсь использовать это для сборки Debug и удалить ее в сборке Release, потому что Я не хочу замедлять окончательный выпуск без необходимости.

Ответы [ 2 ]

1 голос
/ 27 января 2012

Как ваш конструктор инициализирует его правильно, и тогда вам не нужно об этом беспокоиться?

1 голос
/ 27 января 2012

От Gael Fraiteur на форуме PostSharp (спасибо, Гаэль!):

Вы должны использовать LocationInterceptionAspect, который реализует IInstanceScopedAspect. Поле 'backingFieldIsPopulated' становится поле аспекта.

Вы можете найти вдохновение в этом примере:

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

...