В C # есть ли способ принудительно использовать квалификацию "this / base" в членах экземпляра? - PullRequest
4 голосов
/ 14 августа 2010

Иногда это может привести к путанице при чтении кода в элементах экземпляра, который ссылается на другие члены экземпляра того же класса (или базового класса):

public void MyMethod()
{
    Where = did + AllTheseWeirdThings(GetDeclared()); // ?
}

Наличие в стандарте кодирования что-то вроде "префикса all private /защищенные члены с "_" не помогают, потому что члены экземпляра могут по-прежнему ссылаться на открытых участников.

Было бы намного лучше прочитать это:

public void MyMethod()
{
    this.Where = this.did + base.AllTheseWeirdThings(this.GetDeclared()); // ?
}

Есть ли способприменить это, либо с помощью параметров компилятора, StyleCop или чего-то подобного?

Ответы [ 2 ]

6 голосов
/ 14 августа 2010

Нет опции компилятора, которая обеспечивает соблюдение вашего правила.

Однако, краткий поиск Google вызывает это правило StyleCop: http://www.thewayithink.co.uk/stylecop/sa1101.htm

В ReSharper есть аналогичная опция.

4 голосов
/ 14 августа 2010

В C # это и база не обязательны. Единственный раз, когда вам нужно , нужно , чтобы использовать их (в этом контексте), если есть неопределенность. Нет переключателя компилятора, чтобы изменить это поведение.

Я бы также предложил , а не , добавив правило StyleCop. Как правило, лучше использовать это и использовать только тогда, когда вам нужно, например, в конструкторе, который вы можете написать:

this.foo = foo;

Применение ключевых слов "this" и "base" не сделает код более качественным или более читабельным. Если ваш код настолько сбивает с толку, что вы не можете понять, где определены члены, я бы предложил реорганизовать его и упростить иерархию вашего класса.

...