2010-08-14 2 views
4

Иногда это может привести к путанице чтения кода в члены экземпляра, который относится к другим членам экземпляра одного и того же класса (или базовый класс):В C# существует ли способ принудительного использования квалификации «эта/базовая» в членах экземпляра?

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

Имея стандарт кодирования что-то вроде «префикс все частные/защищенные члены с «_» не помогает, потому что члены экземпляра могут по-прежнему относятся к публичным членам

было бы гораздо лучше, чтобы прочитать это:.

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

есть ли способ обеспечить это, либо с компилятором Optio ns, StyleCop или что-то подобное?

+6

Я использовал это, но в конце концов я нашел его менее полезным, чем создаваемый шум. – ChaosPandion

+0

Я включил это предупреждение ReSharper и нашел его невероятно раздражающим. Оказывается, редко бывает путать членов класса с местными жителями, а 'this.' /' base.' обычно избыточно. –

+1

Stylecop имеет правило для префикса 'this', но не для базы. И это также ** на ** по умолчанию. –

ответ

6

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

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

ReSharper имеет аналогичный вариант.

+0

+1 для нахождения правила StyleCop. –

+0

Tbh Я нашел google.com; Google сделал все остальное. –

+0

@ yodaj007: То же самое, что мы все сделали: на SO. –

4

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

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

this.foo = foo; 

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

+0

Поля, как правило, различаются, например, с помощью главного подстрока, чтобы * избежать * необходимости в 'this.'. Итак, да, я согласен, что это не правило, которое мы бы хотели. –

+2

Иногда использование «этой» и «базовой» делает код хуже. Используя исходный пример, если возникает необходимость сделать base.AllTheseWeirdThings() виртуальным, теперь вам нужно выполнить поиск по вашему коду, чтобы удалить ваши вызовы на base.AllTheseWeirdThings(), или, скорее всего, вы забыли, пока что-то не сработает. На самом деле это причина, по которой я прекратил использовать эту/базу так, как она предлагается. –

+1

@Joel: Я бы сказал, что это часто * делает вещи хуже. –

 Смежные вопросы

  • Нет связанных вопросов^_^