实例化一个对象,但使用大括号而不是默认构造函数?

时间:2017-03-24 10:43:42

标签: c# .net

我遇到了以下代码:

var process = new Process
{
     StartInfo =
     {
          Arguments = arguments,
          FileName = applicationPath,
          UseShellExecute = false,
          RedirectStandardOutput = true,
          CreateNoWindow = true
     }
};

我发现它令人困惑:为什么你能在进程后省略()?我假设这只是实例化进程对象,并在其上设置StartInfo,但我不知道你可以使用这种语法。

MSDN在传统语法中显示类似内容:

Process myProcess = new Process();

try
{
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
    myProcess.StartInfo.CreateNoWindow = true;
    myProcess.Start();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

1 个答案:

答案 0 :(得分:1)

此表示法隐式调用默认构造函数,并允许您初始化实例字段/属性的快捷方式。

您还可以显式调用默认构造函数

var process = new Process()
{
    StartInfo =
    {
        Arguments = arguments,
        FileName = applicationPath,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

或任何其他构造函数

var listener = new System.Diagnostics.ConsoleTraceListener(true)
{
    TraceOutputOptions = TraceOptions.Timestamp
};

你应该习惯这种实现