现场实例化抽象类

时间:2021-06-08 13:40:56

标签: c#

在 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' 的实例

我可以按照自己的意愿在现场实例化一个抽象类吗?某种一次性实现,而无需在代码库的另一部分中将整个类声明专用于它。

1 个答案:

答案 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());

但在这种简单的情况下,我的类没有添加任何东西,所以你不妨直接使用委托。

相关问题