Можно опускать () в конструкторе при инициализации?
От: Michael7 Россия  
Дата: 11.03.16 21:47
Оценка:
Чего-то я вдруг на ровном месте засомневался

Есть код

var a =  new class1
                {
                    Property1 = new class2(),
                    Property2 = false
                };


Это тоже самое, что и

var a =  new class1()
                {
                    Property1 = new class2(),
                    Property2 = false
                };


В обоих случаях создается экземпляр класса class1 и инициализируются поля Property1 и Property2
Или есть нюансы?
Re: Можно опускать () в конструкторе при инициализации?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.03.16 22:04
Оценка: 1 (1) +2
Можно.
Поставьте решарпер, он бы в этом месте подсказку выдал, что скобки можно опустить.
Re: Можно опускать () в конструкторе при инициализации?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 11.03.16 22:09
Оценка: 1 (1) +1
Здравствуйте, Michael7, Вы писали:

M>Или есть нюансы?


Afaik, нет нюансов. Resharper предлагает убрать такие скобки как лишние.
С уважением, Artem Korneev.
Re: Можно опускать () в конструкторе при инициализации?
От: xy012111  
Дата: 12.03.16 04:00
Оценка: 20 (2)
Здравствуйте, Michael7, Вы писали:

M>Чего-то я вдруг на ровном месте засомневался

M>Или есть нюансы?

РеШарпер редко, но предлагает такое "опустить", после которого код не компилируется:
using System;
 
class Program
{
  static void Main() {
    var x = DateTime.Now.Day > 10 ? 1 : new Program() ?? default(object);
    //                                                   ^ вот это вот ^
    // но в 10.1 это вроде как обещают поправить.
  }
}


А смотреть нужно в спеку 7.6.10.1 Object creation expressions (C# Language Specification Version 5.0):

object-creation-expression:
new type ( argument-listopt ) object-or-collection-initializeropt
new type object-or-collection-initializer

И ниже (выделение моё):

An object creation expression can omit the constructor argument list and enclosing parentheses provided it includes an object initializer or collection initializer. Omitting the constructor argument list and enclosing parentheses is equivalent to specifying an empty argument list.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.