Почему этот синтаксис неправильный? Нельзя использовать GET и SET для более чем свойства в строке - PullRequest
2 голосов
/ 24 ноября 2011

Мне нужно определить много полей, и я не могу сделать это так:

public double d1, d2, d3, d4, d5, d6 {get;set;} //does not work

Вместо этого я должен сделать

public double d1 { get; set; } public double d2 { get; set; } //and so on

но на частных полях у нас есть:

private double d1, d2, d3, d4 = 0; //Works

Не могу понять, почему он не работает. Может быть, кто-то может объяснить, пожалуйста? есть ли способ обойти?

Обновление: Кажется, что много копий заставило меня испортить мои знания и забыть разницу между полями и свойствами. Во всяком случае, в первой строке я имел в виду, что все должно быть Свойства

Ответы [ 8 ]

7 голосов
/ 24 ноября 2011

В первой строке будет неоднозначность; Вы хотите, чтобы d1 - d5 были свойствами или полями (это две разные вещи). Чтобы избежать этой проблемы, это просто не разрешено.


Обратите внимание на следующее:

double field;
double property {get; set;}
7 голосов
/ 24 ноября 2011

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

Вот быстрый совет, чтобы быстрее набирать текст в Visual Studio. Введите поля:

public int a;
public int b;
public int c;
public int d;

Затем введите { get; set; } и обрежьте его в буфер обмена CTRL + X

Выбрать все точки с запятой с сохранением до 100 * Клавиша ALT и левая кнопка мыши нажаты вместе

Затем вставьте CTRL + V: TA-DA!

public int a { get; set; }
public int b { get; set; }
public int c { get; set; }
public int d { get; set; }
4 голосов
/ 24 ноября 2011

Из спецификации языка C #

1.6.7.2 Свойства

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

3 голосов
/ 24 ноября 2011

Поля (int x) и свойства (int X { get; set; }) - это разные вещи.Вы не можете смешивать два типа объявлений в одном выражении.

2 голосов
/ 24 ноября 2011

Так Microsoft разработала синтаксис ...
Это все равно что спросить, почему я оставляю яблоко из окна, оно падает. Ответ: сила гравитации работает таким образом ...
=)

1 голос
/ 24 ноября 2011

введите команду propf, а затем нажмите «tap» или «prop» и нажмите «tap». думаю, это самый простой способ. Я использую это много себя.

с пропфом вы получите

    private int myVar;

    public int MyProperty
    {
        get { return myVar; }
        set { myVar = value; }
    }

и с опорой вы получите

    public int MyProperty { get; set; };
1 голос
/ 24 ноября 2011

Извините, друг, вам нужно много копировать и вставлять.

1 голос
/ 24 ноября 2011

Я не рад, что эти заявления работают:

private double d1, d2, d3, d4 = 0;

Я думаю, что код сложнее для чтения. Лично я предпочитаю «одна переменная - одна строка», поэтому у меня нет проблем с тем, что

public double d1, d2, d3, d4, d5, d6 {get;set;} 

не работает.

Это синтаксис языка.

...