问题描述
这是我第一次在这里发帖,我对编程还很陌生,所以我可能没有完全理解我打算利用的概念,例如接口或多态性。
我目前正在开发一款小游戏,玩家可以在其中选择不同类型的对象,而我正在努力设计出功能强大的选择系统。现在它的工作方式是通过界面,玩家可以选择每种类型的对象来实现。
public interface ISelectable
{
void DoSomething();
}
然后,此接口用于根据不同的事件(例如鼠标单击或按下的键)在当前选择上调用已实现的方法。
public class Selector
{
public ISelectable selection;
public PerformAction()
{
selection.DoSomething();
}
}
根据对象的类型,以不同的方式实现方法。但是,在某些情况下,我不需要一种对象来响应事件,因此不需要实现在接口上定义的方法。
public class ObjectType1 : ISelectable
{
public void DoSomething() { /*Implemented*/ };
}
public class ObjectType2 : ISelectable
{
public void DoSomething() { /*Not needed*/ };
}
这使我相信这可能不是正确的方法。因此,我有几个问题:
-
我的方法是否可以修复或改进,以使其更有意义,而我不会再遇到上述情况?
-
如果没有,是否有“正确”或更简单的方法来进行这种选择系统?
先谢谢您。如果需要任何进一步的说明,我将尽快答复。
解决方法
您的ObjectType2
为什么实现接口ISelectable
?您可以在不需要时将其删除。
或者,如果您需要通用接口,则可以尝试以下接口定义:
public interface ISomeEmptyInterface
{
}
public interface ISelectable : ISomeEmptyInterface
{
void DoSomething();
}
更改选择器类:
public class Selector
{
public ISomeEmptyInterface myObj;
public void PerformAction()
{
if(myObj is ISelectable)
{
(myObj as ISelectable).DoSomething();
}
}
}
类实现单个接口:
public class ObjectType1 : ISelectable
{
public void DoSomething()
{
Console.WriteLine("ObjectType1 is called");
};
}
public class ObjectType2 : ISomeEmptyInterface
{
// no any implementation
}
一个简单的程序:
Selector sel1 = new Selector();
sel1.myObj = new ObjectType1();
sel1.PerformAction();
// output "ObjectType1 is called"
Selector sel2 = new Selector();
sel2.myObj = new ObjectType2();
sel2.PerformAction();
// not thing happened
此缺点是您的Selector
必须知道其他ISomeEmptyInterface
子接口。