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

标签 c# .net

我遇到了以下代码:

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

我觉得很困惑:为什么你能够省略 Process 之后的 () ?我假设这只是实例化进程对象,并在其上设置 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);
}

最佳答案

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

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

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
};

你应该习惯这种实例化

关于c# - 实例化一个对象,但使用大括号而不是默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997409/

相关文章:

c# - 如何对 ObservableCollection<KeyValuePair<int, string> 进行排序

.net - 如何创建 LINQ to SQL 事务?

c# - 在任务异步运行时处置对象

c# - 如何使用 GTK 更新 gtk.Button 中的图像#

c# - 从 C# 调用 C 函数,传递包含指针的结构

.net - 缺少嵌入互操作类型属性

c# - 如何对我正在使用的不安全的C#CLR和程序集进行签名,而不是使数据库值得信赖

c# - 如何查询内存中的一个DataTable来填充另一个数据表

c# - 在多个 SQL 表中搜索数据

c# - 如何检查代码文件的有效性?