doject.对象.监视器优先于自己的监视器类



我正在D2中编写一个渲染系统,但D更喜欢自己的监视器类object.Object.Monitor(顺便说一下,我从未导入过它)而不是自己的monitor类,这真的让我很恼火。

有什么方法可以防止D使用它的监视器类而不是我的监视器类?我知道我可以附加传统的下划线,或者简单地使用它的全名(myapp.graphics.x11.Monitor),但这个类会被大量使用,所以这些修复并不理想。

module app;
class Monitor {
    public Monitor returnMe() {
        return this; // Error: cannot implicitly convert expression (this) of type app.Monitor to object.Object.Monitor
    }
}

void main() {
    Monitor monitor = new Monitor;
    monitor.returnMe();
}

我认为这是因为在类Monitor中,您的类名还不完全存在,所以编译器认为已经存在的Monitor(它在自动导入的object.d中)更匹配。

实际上,我认为这应该被视为编译器错误,因为如果其他Monitor不存在,那么这段代码确实可以工作。edit:实际上,由于Monitor是Object中的嵌套类,这不是编译器的错误,嵌套名称总是覆盖外部名称。所以Object基类有一个名为Monitor的嵌套类,这很奇怪/编辑

但是现在要解决这个问题,可以在Monitor类中使用typeof(this),而不是它的名称。这将消除内部的歧义,外部代码仍然可以正常工作:

module app;
class Monitor {
     // changed the name only inside the class
    public typeof(this) returnMe() {
        return this;
    }
}

void main() {
     // works normally here
    Monitor monitor = new Monitor;
    monitor.returnMe();
}

最新更新