C # Синтаксическое объяснение - PullRequest
1 голос
/ 18 февраля 2011

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

Когда я спрашиваю, как это работает, я имею в виду, что свойство Setters доступно только для чтения (get), И второе, что означают эти фигурные скобки: "Setters = {".

http://msdn.microsoft.com/en-us/library/ms601374.aspx

Спасибо

datagrid.CellStyle = new Style(typeof(DataGridCell))
                {
                    // Cancel the black border which appears when the user presses on a cell
                    Setters = { new Setter(Control.BorderThicknessProperty, new Thickness(0)) } // End of Setters
                } // End of Style

Ответы [ 3 ]

9 голосов
/ 18 февраля 2011

Это вызов инициализатора объекта и инициализатора коллекции , и он позволяет вам устанавливать свойства в блоке { .. } при вызове конструктора.Внутри блока вы используете Setters = { ... }, который является инициализатором коллекции - он позволяет вам указывать элементы коллекции (здесь вам не нужно создавать новый экземпляр коллекции - он просто добавляет элементы в фигурных скобках).).Для получения дополнительной информации см. Эту страницу MSDN .

В общем, синтаксис инициализаторов объектов имеет несколько параметров:

// Without explicitly mentioning parameter-less constructor:
new A { Prop1 = ..., Prop2 = ... }
// Specifying constructor arguments:
new A(...) { Prop1 = ..., Prop2 = ... }

Синтаксисдля инициализаторы коллекции выглядит следующим образом:

// Creating new instance
new List<int> { 1, 2, 3 }
// Adding to existing instance inside object initializer:
SomeList = { 1, 2, 3 }

Стоит отметить, что это тесно связано с анонимными типами (где вы не даете имя типа - компилятор генерирует некоторые скрытыевведите и вы можете работать с ним, используя var):

// Create anonymous type with some properties
new { Prop1 = ..., Prop2 = ... }

Все эти функции являются новыми в C # 3.0.Смотрите также этот SO post , который объясняет некоторые хитрые аспекты инициализаторов коллекций (в том стиле, в котором вы их используете).

0 голосов
/ 18 февраля 2011

Кажется, он устанавливает значения по умолчанию при создании объекта.Это похоже на передачу значений конструктору, но вы не ограничены только опциями, которые дает вам конструктор.

0 голосов
/ 18 февраля 2011

создает новый объект Style, а затем устанавливает его свойство Setters Это функция ac # 3.0.

...