D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: D语言基础之interface和enum

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为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言基础之interface和enum