D语言游戏编程(9):D语言基础之interface和enum
来源:互联网 发布:htc锁屏软件 编辑:程序博客网 时间:2024/05/01 22:35
D语言的interface用来定义一个方法的集合,这些方法都必须有派生类实现;接口可以多继承。另外,interface兼容win32 com的二进制接口,可以用来调用com对象,例如,我们熟悉的D3D中的IDirect3D9:
D语言的enum提供了指定数据类型的功能,还提供了几个属性,方便程序书写。OK,下面是一些演示代码。
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);
}
{
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);
}
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语言游戏编程(9):D语言基础之interface和enum
- D语言游戏编程(10):D语言基础之函数和操作符重载
- D语言游戏编程(11):D语言基础之模板和混入(mixin)技术
- D语言游戏编程(2):D语言基础之Declarations,Types,Properties
- D语言游戏编程(3):D语言基础之Attributes
- D语言游戏编程(5):D语言基础之Pragmas,Expressions,Statements
- D语言游戏编程(6):D语言基础之Arrays
- D语言游戏编程(7):D语言基础之struct
- D语言游戏编程(8):D语言基础之class
- D语言游戏编程(1):工作环境
- 使用Java语言进行2D游戏编程基础 Fundamental 2D Game Programming with Java 全书笔记(未完结)
- 3D引擎(3D engine)、3D编程语言(3D language)和3D创作系统(3D authoring system)的区别是什么?
- 3D引擎(3D engine)、3D编程语言(3D language)和3D创作系统(3D authoring system)的区别是什么?
- java语言基础之enum
- D语言游戏编程(4):使用MS Visual Studio调试
- D语言
- D 语言
- D语言
- 看了之后睡不着
- C++面试题
- Java替代C语言的可能性
- java面试题总结(一)
- 法国歌手Alizee翻唱麦当娜MV
- D语言游戏编程(9):D语言基础之interface和enum
- PL/0语言编译程序分析
- JAVA面试题总结(二)
- JavaScript实现获取radio的值
- 全面理解javascript的caller,callee,call,apply概念[摘]
- Better Builds with Maven【摘】
- 局域网文件传输软件
- ETL学习笔记之二:ETL与BI
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)