yidabu 2007-4-27 10:48
D语言基础之interface和enum
D语言基础之interface和enum知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org D语言的interface用来定义一个方法的集合,这些方法都必须有派生类实现;接口可以多继承。另外,interface兼容win32 com的二进制接口,可以用来调用com对象,例如,我们熟悉的D3D中的IDirect3D9: [Copy to clipboard] [ - ]CODE: 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,下面是一些演示代码。 [Copy to clipboard] [ - ]CODE: 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); } D语言论坛 http://www.d-programming-language-china.org 补充: 输出信息如下: QUOTE: MyClass MyClass test.MyClass2.show test.MyClass2.foo 0 3 init = 0 min = 0 max = 3 sizeof = 1 其中test是源文件名。( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台