Подтвердить что ты не робот

Как я могу заставить реализацию интерфейса создать свойство 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();
            }
        }
    }
4b9b3361

Ответ 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