在 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); }
        };
    }
}