c#多个抽象类的组合设计
本文关键字:组合 抽象类 | 更新日期: 2023-09-27 18:13:16
我准备在Monogame一个小的游戏引擎,在那里我想有一些像gameObject组成的DrawableObject和ClickHandler(即:
)public class GameObject : DrawableObject, ClickHandler
问题是- c#不支持多重继承,我需要使用接口。我已经制作了DrawableObject和ClickHandler抽象类,所以它们可以有一些已经实现的功能。
public abstract class ClickHandler
{
public class NullClick : ClickHandler
{
public override void Click(Point mousePos)
{
Debug.Print("Clicked on: " + mousePos + ". NullClickHandler assigned");
}
}
private readonly byte _handlerId;
public static readonly NullClick NullClickHandler = new NullClick();
private ClickHandler() {}
public ClickHandler(ref ClickMap clickMap)
{
_handlerId = clickMap.registerNewClickHandler(this);
}
public abstract void Click(Point mousePos);
void unregisterHandler(ref ClickMap clickMap)
{
clickMap.releaseHandler(_handlerId);
}
}
class DrawableObject
{
Texture2D texture;
public Rectangle position;
public DrawableObject()
{
position = Rectangle.Empty;
}
void Load(ref GraphicsDevice graphics)
{
using (var stream = TitleContainer.OpenStream("Content/placeholder.jpg"))
{
texture = Texture2D.FromStream(graphics, stream);
position.Width = texture.Width;
position.Height = texture.Height;
}
}
void Draw(){} //here is going to be some default implementation
}
有什么建议我可以重新设计这个,以便能够实现它吗?我不想把整个实现移动到每个类中,我派生这个接口。
在CodeProject上有一个解决方案:c#的模拟多重继承模式
下面是一个最有趣的部分的例子:
class Aaux : A
{
C CPart;
m1();
static implicit operator C(Aaux a)
{
return a.CPart;
}
}
class Baux : B
{
C CPart;
m2();
static implicit operator C(Baux b)
{
return b.CPart;
}
}
class C
{
Aaux APart;
Baux BPart;
m1()
{
APart.m1();
}
m2()
{
BPart.m2();
}
static implicit operator A(C c)
{
return c.APart;
}
static implicit operator B(C c)
{
return c.BPart;
}
}