您的位置:首页 > 编程语言

D语言游戏编程(9):D语言基础之interface和enum

2007-01-14 10:47 363 查看
D语言的interface用来定义一个方法的集合,这些方法都必须有派生类实现;接口可以多继承。另外,interface兼容win32 com的二进制接口,可以用来调用com对象,例如,我们熟悉的D3D中的IDirect3D9:


interface IDirect3D9 : IUnknown




...{


extern (Windows):


HRESULT RegisterSoftwareDevice(void* pInitializeFunction);


UINT GetAdapterCount();


HRESULT GetAdapterIdentifier(UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier);


UINT GetAdapterModeCount(UINT Adapter,D3DFORMAT Format);


HRESULT EnumAdapterModes(UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode);


HRESULT GetAdapterDisplayMode(UINT Adapter,D3DDISPLAYMODE* pMode);


HRESULT CheckDeviceType(UINT iAdapter,D3DDEVTYPE DevType,D3DFORMAT DisplayFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed);


HRESULT CheckDeviceFormat(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat);


HRESULT CheckDeviceMultiSampleType(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels);


HRESULT CheckDepthStencilMatch(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat);


HRESULT CheckDeviceFormatConversion(UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat);


HRESULT GetDeviceCaps(UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps);


HMONITOR GetAdapterMonitor(UINT Adapter);


HRESULT CreateDevice(UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9* ppReturnedDeviceInterface);


}

D语言的enum提供了指定数据类型的功能,还提供了几个属性,方便程序书写。OK,下面是一些演示代码。


import std.stdio;




void main()




...{


tryInterface();


tryEnum();


}




// interface


//----------------------------------


interface IBase




...{


void show();


}




class MyClass : IBase




...{


void show()




...{


writefln("MyClass");


}


}




interface IBase2




...{


void foo();


}




class MyClass2 : IBase, IBase2 // 接口可以多继承




...{


void show()




...{


writefln(toString(),".show");


}


void foo()




...{


writefln(toString(),".foo");


}


}




void tryInterface()




...{


MyClass a = new MyClass;


IBase i = a; // 类对象(引用)可以转换为interface对象


a.show();


i.show();




MyClass2 b = new MyClass2;


IBase ib = b;


IBase2 i2 = b;




ib.show();


i2.foo();


}




// enum


//------------------------------------------


enum MyEnum : byte




...{


A,


B,


C,


D


}


void tryEnum()




...{


writefln(MyEnum.A);


writefln(MyEnum.D);




// Enum Properties


//-----------------


writefln("init = ", MyEnum.init); // 第一个元素的值


writefln("min = ", MyEnum.min);


writefln("max = ", MyEnum.max);


writefln("sizeof = ", MyEnum.sizeof);




}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: