现有方法的C#扩展方法
如何为现有方法编写扩展方法,如:现有方法的C#扩展方法,c#,.net,C#,.net,如何为现有方法编写扩展方法,如: static class Extensions { public static void RunAsThread(this Action func) { Thread t = new Thread(delegate() { try { if (func != null) func();
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.runashread()起作用。
我试图更改“static void runashread(此委托…或此委托)”。
做不好。
这方面有什么办法吗?有什么办法吗?不,你不能这样做,因为
DoSomething
不是一种类型,而是一种方法
此外,仅仅因为您可以将扩展方法附加到类型,并不意味着您应该
DoSomething
只是一个“方法组”,它将尽可能隐式转换为Action
或兼容的委托类型
DoSomething
本身不是委托
,因此不可能。但是您可以借助隐式方法组转换来执行以下操作
Action a = DoSomething;
a.RunAsThread();
如果
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
};
}
我不能说这是否符合你正在写的其他内容。不,你不能这样做
DoSomething
不是操作
。在某些上下文中,编译器可以从中创建操作
,但这不是这些上下文之一。