在定义一个抽象的class时,是否可以强制子接口定义一个在父接口中定义的property/method?

When defining an abstract class, can you force a child to define a property/method defined in a parent interface?

考虑以下 class 定义。

public abstract class FooBase : IBar
{
  public int Value {get; set;}
  public string ToString() 
  {
    //Return a string.
  }
}

public interface IBar 
{
  int Value;
  string ToString();
}

FooBase 是一个基础 class,它提供 IBar 接口的实现。

作为抽象class,FooBase不能直接实例化。因此,另一个 class 必须派生自这个 class 才能有用。

现在,考虑这样一种情况,您需要像 FooBase 这样的对象来实现 IBar 接口,但是,对于一次特定成员 IBar 您需要 FooBase 来实现它,而不是 FooBase 本身。

有没有办法 implement/address 抽象 class 中的成员,例如 FooBase,派生自 IBar,这样 FooBase 必须实现 IBar 中的单个成员,而不是依赖 FooBase?

的基本实现

我假设没有,因为编译器告诉我们不允许声明像 public abstract int Value 这样的值,但我认为这值得询问和验证。但是,也许我错了,如果是这样,是否有适当的方法来强制我的基础 class 的子实现从我的基础上的父接口实现一个成员?

assume there isn't because the compiler is telling that declaring a value like public abstract int Value is not allowed

当然是允许的,这编译得很好:

interface IBar
{
    int Foo { get; set; }
    string Blah();
}

abstract class Base: IBar
{
    public abstract int Foo { get; set;}
    public string Blah() => null;
}

现在:

class Derived: Base
{
     //must implement Foo
}

顺便说一下,您的代码无法编译,您不能在接口中定义字段。

编译得很好:

public abstract class FooBase : IBar
{
    public abstract int Value { get; set; }
}

public interface IBar
{
    int Value { get; }
}

派生自 FooBase 的任何 class 必须覆盖值:

public class Concrete : FooBase
{
    public override int Value { get; set; }
}