2010-12-30 5 views
8

Я только что использовал Resharper, и это заставило меня почувствовать себя так, как будто я не знаю, как вообще кодировать в C#; это дало мне много предложений; Некоторые из них являются:C чистая очистка кода: resharper

1) SomeObject o = new SomeObject();

Resharper будет конвертировать в:

var o = new SomeObject() 

2) this.Loaded += new RoutedEventHandler(MainPage_Loaded);

в

this.Loaded += MainPage_Loaded; 

3) конвертировать мои переменные и положить _ перед всеми переменными экземпляра.

4) Удаление родительского имени класса. Я проверил это на Silverlight.

public partial class MainPage : UserControl 

в

public partial class MainPage 

5) заменить экземпляр переменной

this.variable = somevalue 

в

variable = somevalue 

ли все это действительно необходимо? Это действительно повлияет на эффективность моей программы? Я имею в виду, что это хорошо сделать, заменив мои имена классов на ключевое слово var. Ведь var также заменяется именем класса во время компиляции. Делает ли это потому, что имеет запрограммирован на то, чтобы делать или что-то подобное действительно влияет тем или иным образом?

+0

Я действительно сомневаюсь в пункте 4. Его разрушающее наследование. –

+3

@Madhur: Было бы так, если бы другая часть частичного класса была наследована от UserControl. –

+0

@Madhur: +1 комментарий Джо. Не забывайте, что этот класс является «частичным». –

ответ

8

Такое поведение все настраивается в настройках ReSharper. Существует сочетание правил очистки кода (например, следует ли заменить обычаи var - я этого не делаю!), Правила стиля кода (например, имена переменных) и правила форматирования (например, как разместить фигурные скобки).

я написал статью, в которой дается обзор этих параметров и как они могут быть использованы для формирования стандартов кодирования, а затем автоматически применяться через код очистки:

http://gojisoft.com/blog/2010/05/10/coding-standards-using-resharper/

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

2

Все эти изменения не должны иметь никакого влияния на скомпилированный код CIL - это просто мнение ReSharper относительно читаемости самого кода C#.

Вы можете настроить все эти параметры в соответствии с потребностями вашего или вашего отдела. По большей части это вопрос личных предпочтений.

3

Они не являются обязательными.

Они следуют стандарту кодирования, установленному resharper. Приятно, что вы можете настроить стандарт кодирования по-своему.

Прекрасная вещь о resharper, хотя заключается в том, что вы в конечном итоге изучаете разные способы делать то, что вы всегда делали определенным образом.

5

Все ли они действительно необходимы?

Отсутствуют.

Действительно ли это повлияет на эффективность моей программы?

Это не повлияет на скомпилированный код таким образом, чтобы изменить производительность или семантику вообще.

Я имею в виду, что это хорошо, заменив мои имена классов на ключевое слово var. После этого var также заменяется именем класса во время компиляции.

Более читаемый код.

Это делается, потому что оно было запрограммировано на то, чтобы делать или что-то подобное действительно влияет тем или иным образом?

Да. Они настраиваются, если вам не нравятся.

1) Все в порядке.

SomeObject o = new SomeObject(); 

Первый SomeObject является излишним и бесполезным, и с var это не менее читаемыми и, возможно, более удобным для чтения. Addtionally для комплексных определений, таких как

var dictionary = new Dictionary<string, Dictionary<string, List<string>>(); 

Это более читаемый способ, чем альтернативный вариант. Однако это может быть преувеличено. Например

string s = "s"; 

предпочтительнее

var s = "s"; 

как

var i = 5; 

над

int i = 5; 

Обратите внимание, что

var i = 2147483648; 

действительно плохо, потому что не сразу понятно, что такое тип i. Для некомплексных определений я предпочитаю использовать явный ввод текста по неявной типизации. Кроме того, иногда вы хотите сказать

IFoo foo = new Foo(); 

явно тип fooIFoo тогда var бы ввести его в качестве Foo.

2) Меньше кода в целом лучше кода.

3) Я ненавижу это предложение. Я ненавижу лидирующий знак. Я использую обычное соглашение об именах для моих переменных-членов, и я предисловие их для this для ясности. Я бы выключил это.

public SomeObject(string name) { 
    this.name = name; 
} 

более читабельным, чем

public SomeObject(string name) { 
    _name = name; 
} 

на мой взгляд.

4) Подождите, почему это делается? Я немного смущен этим. Потому что это частично, а другая часть определения класса имеет наследование? Я не могу себе представить, что это делается в случае, когда он меняет семантику. Я бы выключил это.

5) Я не люблю этот (см 3.)

+0

Относительно # 4: Как указано в комментариях к OP, ReSharper предлагает только это, когда базовый класс объявляется другой частью частичного класса. В этом случае я могу в значительной степени гарантировать, что мы увидим код интерфейса WPF UserControl, чей интерфейс XAML объявляет базовый класс. –

+0

@djacobson: Ах, спасибо. Лично я думаю, что это более ясно с избыточным утверждением базового класса. – jason

+0

Re # 4, я всегда удаляю избыточный базовый класс. Делает это проще, если позже я хочу изменить свое окно на UserControl или мой UserControl на страницу - мне нужно изменить XAML, и все просто работает. Если вы сохранили избыточный «UserControl», вам нужно будет изменить его оба места (XAML и codebehind). DRY. –