如何为现有方法编写扩展方法,如:
static class Extensions
{
public static void RunAsThread(this Action func)
{
Thread t = new Thread(delegate()
{
try
{
if (func != null)
func();
}
catch (ThreadInterruptedException tie) { }
catch (ThreadAbortException tae) { }
catch (Exception ex)
{
Logger.LogDebug(ex);
}
});
t.Start();
}
}
有什么方法可以按照我想要的方式完美地运行这些方法
class WorkingClass
{
public void Work()
{
//Works fine
((Action)DoSomething).RunAsThread();
//Works fine
Extensions.RunAsThread(DoSomething);
//But I really need this to work
DoSomething.RunAsThread();
}
private void DoSomething()
{
//Do Something
}
}
我真的想让DoSomething.RunAsThread()工作。 我试图改变“static void RunAsThread(this delegate ....或this Delegate)”。 无法正常做到。 那有什么工作吗?有没有办法呢?
答案 0 :(得分:1)
不,你不能这样做,因为DoSomething
不是一个类型,它是一种方法。
另外,只是因为你可以将扩展方法附加到类型上,这并不意味着你应该......!
答案 1 :(得分:1)
如果DoSomething
是一个实际的方法,那么稍微调整就可以进行编译:
class WorkingClass
{
public void Work()
{
//Works fine
((Action)DoSomething).RunAsThread();
//Works fine
Extensions.RunAsThread(DoSomething);
//But I really need this to work
DoSomething.RunAsThread();
}
private Action DoSomething = () =>
{
//Do Something
};
}
这是否适合你所写的其他所有内容,我不能说。
答案 2 :(得分:0)
DoSomething
只是一个“方法组”,只要有可能,它就会隐式转换为Action
或兼容的委托类型。
DoSomething
本身不是Delegate
,因此不可能。但是你可以借助隐式方法组转换来完成以下任务。
Action a = DoSomething;
a.RunAsThread();