C#匿名实现接口(或抽象类)


问题内容

在Java中,可以扩展带有匿名类的接口,该类可以动态实现。例:

Runnable myRunnable = new Runnable()
{
    @Override
    public void run() { /**/ }
}

(更多信息:http : //www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html#ixzz1k07mVIeO)

这在C#中可能吗?如果不是,那么有什么可行的替代方法而不必依赖于实现过多的子类?


问题答案:

不,您不能在C#中做到这一点-但通常,替代设计方法是使用委托。在您提供的示例中,Runnable通常使用表示ThreadStart,并且您可以使用匿名方法或lambda表达式:

ThreadStart start = () =>
{
    // Do stuff here
};

或者,如果您只运行带有正确签名的方法,则可以使用方法组转换:

ThreadStart start = MethodToRunInThread;

或在Thread构造函数中调用:

Thread t = new Thread(MethodToRunInThread);
t.Start();

如果确实需要实现一个接口,则必须真正实现它(可能在私有嵌套类中)。但是,根据我的经验,在C#中这种情况并不十分常见-通常C#接口是那种自然会要求“真正”实现的类型,即使在Java中也是如此。