我想创建一个Action类,它是输入(在DLL中定义,不能编辑)和等待对象(由我定义)的包装器。
我想要一个action的列表和一个接受action的方法
像这样的包装类是正确的方法吗?
public class Action
{
public Object action;
public bool setAction(Object action)
{
if (action != typeof(Input) || action != typeof(Wait))
this.action = action;
else
return false;
return true;
}
}
因此,您的Action
包装Input
或Wait
对象。当您需要存储一个对象的引用时,该对象可以是多种类型之一,最好的方法通常是将其简化为基本公共类型或接口,并使用它。
因此,确定Wait
和Input
有什么共同之处,并将其放在接口中。从你的问题中我不太清楚它们在这里应该做什么,所以我就叫它IAction
吧。
public interface IAction
{
void Act();
}
你可以直接在Wait
上实现这个接口,因为它是你的代码。然而,你不能控制Input
。不用担心,只需为它创建自己的包装器,并让包装器实现接口:
public class InputWrapper : IAction
{
private readonly Input _input;
public InputWrapper(Input input)
{
_input = input;
}
public void Act() => _input.Whatever(); // delegate to input
}
然后你可以使用它们:
var actions = new IAction[] { wait, new InputWrapper(input) };
请注意如何直接放置Wait
,因为它实现了接口,但是对于Input
,您需要创建一个包装器。这种输入到包装器的转换不是自动完成的(您总是可以为此重载转换操作符,但我不建议这样做)。
假设Input和Wait有一组通用的属性和方法。因此,只需声明一个接口或抽象类,并让每个类继承和实现它。然后在你的方法声明中,使用public void myCustomMethod(IInterface obj)
如果你真的设置了这一点,作为Object传入并使用反射-然后,根据反射的类型,采取相应的行动。就像其他人说的那样,我会使用多个方法。