c# - C# - 以统一的方式选择和使用不同类型的对象
问题描述
这是我第一次在这里发帖,而且我对编程还很陌生,所以我可能没有完全理解我打算使用的概念,例如接口或多态性。
我目前正在构建一个小游戏,玩家可以在其中选择不同类型的对象,我正在努力想出一个强大的选择系统。它现在的工作方式是通过一个界面,由玩家可以选择的每种类型的对象实现。
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
接口是什么。
推荐阅读
- python - 发出httpresponseredirect:无法重定向到主页
- prometheus - 未使用 Grafana 中选择的“全部”过滤器更新链式变量
- json - 使用 Angular 将 JSON 对象中的嵌套 JSON 对象作为字符串传递
- charts - 如何在 tradingview 小部件图表中默认合并指标
- solver - 中止:无法为 `float_times(X_INTRODUCED_44_, X_INTRODUCED_45_, X_INTRODUCED_46_)` 约束创建线性公式
- android - 注解处理器如何获取gradle扩展?
- css - 我想在我的页面中连续有 3 个 div,我尝试了 flex、grid、inline,但我无法这样做
- react-hooks - 使用 React Hooks 显示组件渲染时间和日期
- carla - 如何获取视野内车辆的信息
- android - 在预定义的 XY 坐标处设置 ImageView 和 TextView - Xamarin Android