Как я могу заставить реализацию интерфейса создать свойство auto вместо NotImplementedException?
Учтите, что у нас есть простой интерфейс, например ICar
, когда я перемещаю мышь над выражением ICar и нажимаю на Implement Interface
продукт Visual Studio ниже.
Есть ли способ предоставить только свойство auto, как видно на интерфейсе. Это вызывает проблемы с повторным факторингом и делает меня сумасшедшим каждый раз!
public interface ICar
{
double Power { get; set; }
}
public class Car:ICar
{
public double Power
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
}
Ответы
Ответ 1
Вам нужно изменить шаблон, используемый Visual Studio, когда вы нажимаете Implement Interface
. Шаблон хранится в следующем месте:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring
Шаблон, который вам нужно изменить, называется PropertyStub.snippet
ПРИМЕЧАНИЕ. Я хотел бы создать резервную копию существующего файла фрагмента, прежде чем вносить изменения, чтобы вы могли легко вернуться, если все будет не так хорошо.
Строки, которые необходимо обновить:
$GetterAccessibility$ get
{
$end$throw new $Exception$();
}
$SetterAccessibility$ set
{
throw new $Exception$();
}
Строки должны быть изменены следующим образом:
$GetterAccessibility$ get;
$SetterAccessibility$ set;
Ответ 2
Во-первых, это не авто-свойство. Если вы хотите авто-свойство, вам нужно удалить то, что было создано компилятором, и заменить его на
public double Power { get; set; }
Это авто-свойство.
Компилятор делает это, потому что это самая простая вещь, которую может сделать компилятор, создающий код, который будет компилироваться. Я полагаю, что он мог бы делать автоматические свойства для свойств на интерфейсах, но затем это вводит несогласованность между тем, как он обрабатывает методы (он также генерирует заглушки методов NotImplementedException
) и свойствами. Тем не менее, вы можете это изменить. Он обрабатывается в фрагментах:
1) Откройте каталог фрагментов и найдите этот файл
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring\PropertyStub.snippet
2) Измените файл PropertyStub.snippet
, заменив заглушки свойств
<![CDATA[$signature$ { $GetterAccessibility$ get; $SetterAccessibility$ set; }]]>
Вы можете сделать то же самое для MethodStub.snippet
, чтобы он создавал пустое тело.
Теперь, когда вы автоматически реализуете интерфейс с помощью Visual Studio, вы получите
public double Power { get; set; }
Ответ 3
Если люди приходят в поиске, пытаясь сделать это, Visual Studio 2015 не может изменить фрагменты рефакторинга. После обновления к Roslyn это похоже на то, что Visual Studio никогда больше не ссылается на эти файлы фрагментов и делает это непосредственно в Roslyn.
Ответ 4
Вы можете изменить его в параметрах:
Инструменты > Параметры > Текстовый редактоp > С# > Дополнительно, а внизу
![t]()