这是C#实例化的另一种方式吗?

时间:2017-11-19 20:28:58

标签: c#

我是C#的新手,并试图在WPF项目中使用LiveCharts。不幸的是,我在第一个例子中迷路了,我找不到任何其他方法的参考。说实话,我甚至不确定我是否正在搜索正确的术语。

第二个陈述是否与第一个陈述相同?

你什么时候用一个而不是另一个?

我熟悉的方法:

SeriesCollection seriesCollection = new SeriesCollection();

我正在努力理解的代码:

void MyMethod() 
{
    SeriesCollection = new SeriesCollection { };
}
public SeriesCollection SeriesCollection { get; set; }

2 个答案:

答案 0 :(得分:2)

第一个方法声明了一个类变量并为其分配了一个新对象。

第二种方法将新对象分配给类中声明的属性。这种类型有一种较短的形式,如下所示:

public SeriesCollection SeriesCollection { get; set; } = new SeriesCollection();

成员变量和属性之间存在差异,否则它基本上是相同的。

答案 1 :(得分:1)

初始化对象有三种语法。

有构造函数调用语法:

var a = new A();
var b = new A(123);

有对象初始化语法:

代码

var a = new A { Foo = 1, Bar = 2 };

简写:

var a = new A();
a.Foo = 1;
a.Bar = 2;

在大多数情况下,它执行完全相同(因此首先调用空构造函数,然后设置属性),但匿名类型除外(其中隐藏的构造函数实际上是命中的)。

你甚至可以将两者结合起来:

var a = new A(123){ Foo = 1 };

如果您使用(),则可以省略{},但也不允许var l = new List<int>{1, 2, 3};

第三种方法是集合实例化语法:

var l = new List<int>();
l.Add(1);
l.Add(2);
l.Add(3);

相当于:

IEnumerable

您可以对同时实施Add()且具有适当的公共()方法的任何类型执行此操作。

同样,这可以与构造函数()结合使用,但如果它们为空,则可以省略IEnumerable

如果某个类型既具有可设置属性又已实施Add()且至少有一个公共{}方法,则空{}对于是否&#是不明确的39;是对象初始化器或集合初始化器,但由于没有设置属性的对象初始化器和不添加元素的集合初始化器具有相同的结果,因此它的含义不重要,并且是允许的。

作为一种风格问题,我通常会建议空()支持空{},但如果是类型,则通常会使用{{}进行初始化{1}}然后空的didFinishLaunchin withOptions似乎更符合您的其余代码。