インターフェース - ちょうど 基底クラスに適用される場合は、サブクラスは は 基底クラスが行う機能を実装する必要はありません。
これは完全ではありません。基本クラスが抽象クラスの場合、そのインタフェースに属するメソッドを抽象クラスとしてマークし、実装を強制的にサブクラスにできます。
これは、あなたが言及しなかったオプションをもたらします:両方を使うこと。あなたはIFoo
インターフェイスを持っていて、それを実装する抽象基本クラスFooBase
を持っています。これは、サブクラスにインターフェイスのデフォルトの実装(またはその一部)を提供します。また、他のものから継承してインターフェイスを実装したり、インターフェイスを実装したいが基本クラスの実装を継承したりすることはできません。例:
// Your interface
interface IFoo { void A(); void B; }
// A "default" implementation of that interface
abstract class FooBase : IFoo
{
public abstract void A();
public void B()
{
Console.WriteLine("B");
}
}
// A class that implements IFoo by reusing FooBase partial implementation
class Foo : FooBase
{
public override void A()
{
Console.WriteLine("A");
}
}
// This is a different class you may want to inherit from
class Bar
{
public void C()
{
Console.WriteLine("C");
}
}
// A class that inherits from Bar and implements IFoo
class FooBar : Bar, IFoo
{
public void A()
{
Console.WriteLine("Foobar.A");
}
public void B()
{
Console.WriteLine("Foobar.B");
}
}
抽象クラスで抽象メソッドを作成する場合、そのメソッドを実装するためにサブクラスを必要としないことに注意してください。あなたが好きなだけ多くのサブクラスを実装することはできません。それらはすべて抽象的でなければなりません。 –
FWIW正しいOOの用語は* function *であり、* function *ではありません。 –