发新话题
打印

[转载D语言文档] 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:

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);

}

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为大家提供一个学习交流各种知识的平台

TOP

发新话题