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

    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);
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值