インターフェイスから継承する場合は、そのインターフェイスのすべてのメンバーを実装する必要があります。ただし、適切と思われる場合は、インターフェイスを拡張できます。複数のインターフェースを継承することもできます。有効な例:
public interface IPerson
{
string FullName { get; set; }
string SSN { get; set; }
}
public interface IPersonDBContext
{
void Save(IPerson person);
}
public class PersonData : IPerson, IPersonDBContext
{
// Implements IPerson FullName
public string FullName { get; set; }
// Implements IPerson SSN
public string SSN { get; set; }
// Implements IPersonDBContext Save()
public void Save(IPerson person)
{
// Code to save the IPerson instance to the DB...
}
// Added method, not included in any interface...
public void Validate(IPerson person)
{
// Code to validate the IPerson instance...
}
}
これで、抽象クラスの場合、継承できる具体的なメソッドを含めることができますが、オーバーライドする必要のあるいくつかのメソッドを指定することもできます。ただし、複数の基本クラスを持つことはできないことに注意してください(抽象クラスは引き続きクラスです...)。したがって、インターフェイスのように2つの抽象クラスを混在させることはできません。例:
public abstract class Person
{
public string FullName { get; set; }
public string SSN { get; set; }
public abstract void Save();
}
public class PersonData : Person
{
// Implements Abstract Person Save() Method
public override void Save()
{
// Save logic here...
}
// Non-inherited member...
public void Validate()
{
// Access properties of the base class (Abstract Person)
this.FullName.ToString();
this.SSN.ToString();
}
}
最後に、そして最も強力なことに、単一の抽象基本クラスを必要な数のインターフェースと組み合わせることができます...したがって、例2の抽象クラスPersonと例1のインターフェースIPersonDBContextを保持すると、これを行うことができます。 :
public class PersonData : Person, IPersonDBContext
{
// Implements Abstract Person Save() Method
public override void Validate()
{
// Access properties of the base class (Abstract Person)
this.FullName.ToString();
this.SSN.ToString();
}
// Inplmenets IPersonDBContext Save()
public void Save(Person person)
{
// Save logic here...
}
// Non-inhereted method
public void Clone(Person person)
{
// Logic to make a member-wise clone.
}
}
お役に立てば幸いです...