c#如何正确包装两个对象



我想创建一个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包装InputWait对象。当您需要存储一个对象的引用时,该对象可以是多种类型之一,最好的方法通常是将其简化为基本公共类型或接口,并使用它。

因此,确定WaitInput有什么共同之处,并将其放在接口中。从你的问题中我不太清楚它们在这里应该做什么,所以我就叫它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传入并使用反射-然后,根据反射的类型,采取相应的行动。就像其他人说的那样,我会使用多个方法。

最新更新