这个构造函数语法的名称是什么?

时间:2014-12-02 13:17:26

标签: c# constructor

我习惯了这种语法:

DirectorySearcher ds = new DirectorySearcher(forestEntry,filter);

并使用以下语法:

DirectorySearcher ds = new DirectorySearcher();
ds.SearchRoot = forestEntry;
ds.Filter = filter;

他们都只使用不同的构造函数,没有。 1只能工作,因为存在2参数构造函数,而不存在。 2只能起作用,因为SearchRoot和Filter在构造后不是只读的。

现在我获得了使用以下语法的代码:

DirectorySearcher ds = new DirectorySearcher
                           {
                               SearchRoot = forestEntry,
                               Filter = filter
                           };

这应该与上面的示例相同,但调用哪个Constructor以及程序如何继续?这种语法有特殊名称吗?我必须添加到我自己的类中才能像这样构造它们?

1 个答案:

答案 0 :(得分:10)

这是你的第二个代码的等价物。编译器会将其转换为:

DirectorySearcher ds = new DirectorySearcher();
ds.SearchRoot = forestEntry;
ds.Filter = filter;

这称为object inializers。您可以将对象初始值设定项语法与类的公共属性和字段一起使用。唯一的例外是readonly字段。由于它们只能在构造函数中初始化,因此无法在初始化程序中使用它们。

在这种情况下,您还需要一个无参数构造函数,因为:

DirectorySearcher ds = new DirectorySearcher
                       {
                           SearchRoot = forestEntry,
                           Filter = filter
                       };

等同于:

DirectorySearcher ds = new DirectorySearcher() // note the parentheses
                       {
                           SearchRoot = forestEntry,
                           Filter = filter
                       };

所以你要调用无参数构造函数。您还可以将注释器与其他构造函数一起使用,如注释中所述。