1
我不知道這裏發生了什麼。請解釋。代碼...無法將接口作爲D語言中的指針傳遞
import std.stdio;
void main(string[] args)
{
ClassObject ss1 = new ClassObject("First Class");
writeln(ss1.produce());
ClassObject ss2 = new ClassObject("Some Class");
ClassObject* ss3 = &ss2;
voidclass(ss3);
ClassObject ss4 = new ClassObject("Final Class");
passinterface(ss4);
ClassObject* ss5 = &ss4;
writeln(ss5.produce());
voidinterface(ss5);
}
public void voidclass(void* arg)
{
ClassObject* ss = cast(ClassObject*) arg;
writeln(ss.produce());
writeln(ss.produce);
ClassObject ssnp = *ss;
writeln(ssnp.produce());
writeln(ssnp.produce);
}
public void voidinterface(void* arg)
{
IObject* bob = cast(IObject*) arg;
writeln(bob.produce());
}
public void passinterface(IObject arg)
{
writeln(arg.produce());
}
interface IObject
{
string produce();
}
class ClassObject : IObject
{
protected string _value;
this(string value)
{
this._value = value;
}
public string produce()
{
return this._value;
}
}
輸出...
First Class
Some Class
Some Class
Some Class
Some Class
Final Class
Final Class
main.ClassObject
這是怎麼回事與最終輸出?我將一個類實例傳遞給一個需要指針的函數。然後當我把它作爲一個接口來使用時,它並不尊重接口的方法。但是,有些如何能夠告訴我這是我通過的課程的一個實例?我不得不使用void *作爲參數類型。所以請不要使用它。
編輯:編譯信息...
$ dmd -v
DMD64 D Compiler v2.062
Copyright (c) 1999-2012 by Digital Mars written by Walter Bright
Documentation: http://dlang.org/