Проблема с автоматическими свойствами - PullRequest
1 голос
/ 15 января 2010

В настоящее время я использую .Net 3.0, но я не понимаю, как использовать автоматические свойства.

Например, если я хочу написать этот пример кода через Authomatic Properties, что мне делать?

private string _name = string.Empty;
private string _family = string.Empty;
//A field with default value
private DateTime _releaseDate = System.DateTime.Now;


//ReadOnly Property
public string Name
{
    get {return _name; }
}

//enforce validation rules on setting 
public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            return new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}

// A property from two other fields
public string FullName
{
    get { return _name + " " + _family; }
}

Спасибо всем за ваш ответ, я получил свой ответ

Ответы [ 4 ]

6 голосов
/ 15 января 2010

Вы не можете.

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

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

public string Foo { get; private set; }

Кстати, вы не можете вернуть исключение из строкового свойства. Исключения должны быть брошен , а не возвращен .

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            return new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}

Это, вероятно, следует читать:

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            throw new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}
3 голосов
/ 15 января 2010

Вы не можете. Автоматическое свойство не может быть прочитано и не может содержать логику в теле.

Автоматическое свойство - это краткая форма этого

private string _name;
public string Name
{
   get{return _name;}
   set{_name = value;}
}

К этому

public string Name{get;set;}
3 голосов
/ 15 января 2010

Вы говорите, что используете .NET 3.0 - вы используете VS2005? Если это так, вы используете C # 2, который не поддерживает автоматически реализованные свойства.

Если вы используете VS2008 и ориентируетесь на .NET 3.0, то они должны работать нормально - но в любом случае они на самом деле не будут применимы, поскольку ни одно из ваших свойств не является «тривиальным». Автоматически реализованные свойства представляют собой компактный способ записи:

private string foo;
public string Foo { get { return foo; } set { foo = value; } }

Если ваше свойство не следует этому шаблону (модификаторы доступа по модулю для свойства), тогда автоматические свойства вам не помогут.

2 голосов
/ 15 января 2010

Автоматические свойства используются, когда вы просто хотите, чтобы свойство «повторяло» вспомогательное поле.

т.е.

string _name;
public string Name { get { return _name; } set { _name = value; } }

можно просто переписать как

public string Name { get; set; }

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

Однако, если вы хотите сделать что-то особенное, например, значение по умолчанию или проверить набор value, вы не сможете их использовать.

Возможное исключение на самом деле - инициализация по умолчанию.

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

...