我正在尝试创建一个表单,该表单将在处理特定任务(作为委托(delegate)传递给构造函数)时对某些内容进行动画处理。它工作正常,但我遇到的问题是,如果我要执行的特定方法的返回类型为 void,我将无法实例化泛型类的副本。
我知道这是设计使然,但我想知道是否有针对这种情况的已知解决方法。
如果它对我的所有 Windows 窗体都有帮助(为简洁起见进行了修剪):
public partial class operatingWindow<T> : Form
{
public delegate T Operation();
private Operation m_Operation;
private T m_ReturnValue;
public T ValueReturned { get { return m_ReturnValue; } }
public operatingWindow(Operation operation) { /*...*/ }
}
我这样调用它:
operatingWindow<int> processing = new operatingWindow<int>(new operatingWindow<int>.Operation(this.doStuff));
processing.ShowDialog();
// ...
private int doStuff()
{
Thread.Sleep(3000);
return 0;
}
最佳答案
不,您需要创建一个重载来执行此操作。
例如
public operatingWindow(Action action)
{
m_Operation=() => { action(); return null; }
}
另外你不需要定义你自己的委托(delegate),你可以使用Func<T>
和行动。
关于c# - 将 void 传递给泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/668316/