在D中创建匿名类时,如何将参数传递给构造函数

时间:2015-06-10 14:07:13

标签: d

我得到了如何创建一个匿名类

class A {}

class B {
    A anonymous = new class A { ... };
}

但是如果A有一个构造函数,并且没有默认的构造函数。

class A {
    init(string someArg) {
    }
}

class B {
    A anonymous = new class A { ... };???
}

如何将参数传递给该构造函数?

3 个答案:

答案 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); }
        };
    }
}