Рефакторинг свойства в поле - PullRequest
3 голосов
/ 13 октября 2010

Если у меня есть поле, я могу создать соответствующее свойство, щелкнув правой кнопкой мыши по полю -> Refactor -> Encapsulate Field.

Есть ли способ достичь обратного?

У меня есть свойства, такие как

public int Foo { get; set; }

Я хочу создать приватные поля и изменить геттер и сеттер для использования поля. Затем я могу реализовать INotifyPropertyChanged и изменить установщик на запуск события PropertyChanged при изменении значения свойства.

так становится

например.

private int _foo;
public int Foo
{
    get { return _foo;}
    set 
    {
        if (value != _foo)
        {
            _foo = value;
            NotifyPropertyChanged("Foo");
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

2 варианта:

  1. Создать фрагмент кода. Это не приводит к автоматическому рефакторингу каких-либо существующих для вас свойств, но, по крайней мере, может позволить вам быстро воссоздать свойства, если вы хотите сделать это вручную. Например, создайте файл «propv.snippet» в папке «Мои документы \ Visual Studio 2008 \ Code Snippets \ Visual C # \ My Code Snippets» со следующим содержимым. После этого вы сможете создавать свойства с полем поддержки, выбрав «propv» во всплывающем окне intellisense:

    <?xml version="1.0" encoding="utf-8" ?>
    <CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
        <CodeSnippet Format="1.0.0">
            <Header>
                <Title>propv</Title>
                <Shortcut>propv</Shortcut>
                <Description>Code snippet for property and backing field</Description>
                <Author>Dr. Wily's Apprentice</Author>
                <SnippetTypes>
                    <SnippetType>Expansion</SnippetType>
                </SnippetTypes>
            </Header>
            <Snippet>
                <Declarations>
                    <Literal>
                        <ID>type</ID>
                        <ToolTip>Property type</ToolTip>
                        <Default>int</Default>
                    </Literal>
                    <Literal>
                        <ID>property</ID>
                        <ToolTip>Property name</ToolTip>
                        <Default>MyProperty</Default>
                    </Literal>
                    <Literal>
                        <ID>field</ID>
                        <ToolTip>The variable backing this property</ToolTip>
                        <Default>myVar</Default>
                    </Literal>
                </Declarations>
                <Code Language="csharp">
                    <![CDATA[private $type$ $field$;
    
    
    public $type$ $property$
    {
    get { return $field$;}
    set { $field$ = value;}
    }$end$]]>
                </Code>
            </Snippet>
        </CodeSnippet>
    </CodeSnippets>
    
  2. Используйте функцию записи макросов в Visual Studio или другом инструменте (Notepad ++), чтобы записать шаги, необходимые для рефакторинга свойства, а затем просто запустить этот макрос, где это необходимо.

1 голос
/ 13 октября 2010

Взгляните на Resharper , так как он может сделать это для вас, а также намного больше вариантов рефакторинга. Их живые шаблоны намного проще в использовании, чем фрагменты Visual Studio.

1 голос
/ 13 октября 2010

В Visual Studio нет встроенного рефакторинга для этого.

К сожалению, ни Resharper , ни Refactor Pro также не включают это в качестве стандартной функции. Вариантов реализации INPC слишком много.

При этом у меня есть шаблон Resharper, который генерирует свойство, реализующее INPC. Используя это, вы можете ввести маленькое ключевое слово (мое propno ), нажать вкладку и ввести имя свойства - все остальное, включая вспомогательное поле, автоматически генерируется из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...