我得到了如何创建一个匿名类
class A {}
class B {
A anonymous = new class A { ... };
}
但是如果A有一个构造函数,并且没有默认的构造函数。
class A {
init(string someArg) {
}
}
class B {
A anonymous = new class A { ... };???
}
如何将参数传递给该构造函数?
答案 0 :(得分:3)
只需实现一个默认构造函数,该构造函数使用super
调用父构造函数:
class A
{
this(string someArg) {}
}
void main()
{
A anonyomus = new class A {
this()
{
super("Hello");
}
};
}
答案 1 :(得分:2)
另一种选择是不使用匿名类,而只是定义嵌套类。
class A {
this(string someArg) {
}
}
void main() {
class not_really_anonymous : A {
this(string a) { super(a); }
}
A anonymous = new not_really_anonymous("arg");
}
由于您可以在D中定义函数内部的类,因此您应该能够使用此技术实现基本相同的功能。然后你像平常一样定义构造函数,像往常一样定义new,只需在返回时引用基类/接口。
答案 2 :(得分:0)
class A {
this(string someArg) {}
}
class B {
A anonymous;
this() {
anonymous = new class A {
this() {
super("hello");
}
};
}
}
或
class A {
this(string someArg) { }
}
class B {
A anonymous;
this() {
anonymous = new class("hello") A {
this(T...)(T args) { super(args); }
};
}
}