在 D 中创建匿名 class 时如何将参数传递给构造函数
How do you pass parameters to the constructor when creating an anonymous class in D
我知道如何创建匿名 class
class A {}
class B {
A anonymous = new class A { ... };
}
但是如果 A 有一个构造函数,并且没有默认构造函数。
class A {
init(string someArg) {
}
}
class B {
A anonymous = new class A { ... };???
}
如何将参数传递给该构造函数?
只需实现一个默认构造函数,它调用父构造函数 super
:
class A
{
this(string someArg) {}
}
void main()
{
A anonyomus = new class A {
this()
{
super("Hello");
}
};
}
另一种选择是不使用匿名 class 而是定义一个嵌套的。
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 中的函数内部定义 classes,您应该能够使用此技术实现基本相同的事情。然后你像往常一样定义构造函数并像往常一样新建它,返回它时只需引用基础class/interface。
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); }
};
}
}
我知道如何创建匿名 class
class A {}
class B {
A anonymous = new class A { ... };
}
但是如果 A 有一个构造函数,并且没有默认构造函数。
class A {
init(string someArg) {
}
}
class B {
A anonymous = new class A { ... };???
}
如何将参数传递给该构造函数?
只需实现一个默认构造函数,它调用父构造函数 super
:
class A
{
this(string someArg) {}
}
void main()
{
A anonyomus = new class A {
this()
{
super("Hello");
}
};
}
另一种选择是不使用匿名 class 而是定义一个嵌套的。
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 中的函数内部定义 classes,您应该能够使用此技术实现基本相同的事情。然后你像往常一样定义构造函数并像往常一样新建它,返回它时只需引用基础class/interface。
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); }
};
}
}