Как установить autoproperty в конструкторе структуры? - PullRequest
3 голосов
/ 30 ноября 2009

Почему это действительно

public struct MyStruct
{
    public MyStruct(double value)
    {
        myField = value;
    }

    private double myField;

    public double MyProperty
    {
        get
        {
            return myField;
        }
        set
        {
            myField = value;
        }
    }
}

и это не

public struct MyStruct
{
    public MyStruct(double value)
    {
        MyProperty = value;
    }
    public double MyProperty
    { 
        get; 
        set;
    }
}

Ответы [ 3 ]

3 голосов
/ 30 ноября 2009

Вам нужен этот синтаксис:

public struct MyStruct 
{
    public MyStruct(double value) : this()
    {
        MyProperty = value;
    }

    public double MyProperty { get; set; }
}

Я получил эту информацию из следующего ТАК сообщения.

3 голосов
/ 30 ноября 2009

Можете ли вы изменить свой конструктор на это:

public MyStruct(double value)  : this()
{
    myField = value;
}

Причина в том, что вы не можете получить доступ к свойствам, пока не будут заполнены поля поддержки. При вызове конструктора по умолчанию будет автоматически заполнено поле поддержки реализованного свойства, и вы сможете получить доступ к свойствам. Недостатком является то, что вы теперь устанавливаете свойство дважды (один раз в базовом конструкторе и один раз в конструкторе).

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

1 голос
/ 30 ноября 2009

вам не нужен набор get, если вы не собираетесь делать, то делайте что-нибудь. Их следует использовать для проверки типа. Чтобы заставить звук работать, удалите: { получить; задавать; }

...