在 Java 中,我可以实例化接口的现场实现:
interface Rubbable {
public void rub();
}
...
Rubbable r = new Rubbable() {
@Override
public void rub() {
// implementation
}
};
就像是一次性实现之类的东西。
我尝试用 C# 中的抽象类做同样的事情
public abstract class Foo
{
public abstract Bar Method();
}
Foo f = new Foo
{
public override Bar Method()
{
return new Bar();
}
}
但我收到错误
<块引用>无法创建抽象类型或接口 'Foo' 的实例
我可以按照自己的意愿在现场实例化一个抽象类吗?某种一次性实现,而无需在代码库的另一部分中将整个类声明专用于它。
答案 0 :(得分:0)
这样的特性在c#中是不可用的。一种解决方法可能是使用委托:
public class DelegateFoo : Foo {
private Func<Bar> barMethod();
public DelegateFoo(Func<Bar> tmp) => barMethod = tmp;
public override Bar Method() => barMethod();
}
var f = new DelegateFoo(() => new Bar());
但在这种简单的情况下,我的类没有添加任何东西,所以你不妨直接使用委托。