Как реализовать автоматически реализованные свойства в C # для установки значения - PullRequest
0 голосов
/ 04 июня 2010

Я пытаюсь использовать автоматически реализованные свойства. Это показывает мне ошибку

    public OpenMode OpenFor
    {
        get;//must declare a body because it is not marked as abstract, partial or external. Why so 
        set
        {
            if (value == OpenMode.Add)
            {
                btnAddGuest.Text = "Save";
                btnUpdatePreference.Visible = false;
                dgvGuestInfo.ClearSelection();
            }
            else if (value == OpenMode.Update)
            {
                btnAddGuest.Text = "Update";
                btnUpdatePreference.Visible = true;
            }
        }
    }

Ответы [ 5 ]

4 голосов
/ 04 июня 2010

Вы должны реализовать как геттер, так и сеттер, если реализуете один из них. Вы можете автоматически реализовать только оба:

public OpenMode OpenFor
{
   get; 
   set;
}

Вы можете использовать вспомогательное поле:

private OpenMode openFor;

public OpenMode OpenFor
{
   get
   {
      return openFor;
   }
   set 
   {
      openFor = value;
      //...
   }
}
0 голосов
/ 04 июня 2010

Также обратите внимание, что автоматически реализованные свойства также прослушивают модификаторы доступа:

public string Foo { get; private set; }

Хотя вам все еще нужно определить оба.

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

Кроме того, ваш метод get может вывести значение из состояния кнопок, которые вы изменяете в наборе, но это начинает становиться глупым.

0 голосов
/ 04 июня 2010
private OpenMode _openFor;
public OpenMode OpenFor
{
    get{return _openFor;}
    set{
        _openFor = value;
        SetOpenFor(value);
    }
}

private void SetOpenFor(OpenMode mode)
{
 if (mode== OpenMode.Add)
 {
     btnAddGuest.Text = "Save";
     btnUpdatePreference.Visible = false;
     dgvGuestInfo.ClearSelection();
 }
 else if (mode == OpenMode.Update)
 {
     btnAddGuest.Text = "Update";
     btnUpdatePreference.Visible = true;
 }
}
0 голосов
/ 04 июня 2010

Для использования просто получить; вам нужно использовать только набор; также. В этом случае у вас будет неявная переменная. Когда вы объявляете тело для набора, это не работает. Задайте себе вопрос; как вы можете получить то, что никогда не сможете установить?

0 голосов
/ 04 июня 2010

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

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