我习惯了这种语法:
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以及程序如何继续?这种语法有特殊名称吗?我必须添加到我自己的类中才能像这样构造它们?
答案 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
};
所以你要调用无参数构造函数。您还可以将注释器与其他构造函数一起使用,如注释中所述。