次のインターフェースを検討してください
public interface ICustomData
{
String CustomData { set; get; }
}
MSDNのドキュメントによると、インターフェイスのメンバーは自動的に公開されます。
今、自分のインターフェースを実装したいとしましょう。
public class CustomDataHandler : ICustomData
{
}
これはコンパイル時に壊れ、「CustomData」を実装していないことを教えてくれます
一方、これは機能します。
public class CustomDataHandler : ICustomData
{
public String CustomData { set; get; }
}
私の質問は次のとおりです。インターフェイスのメンバーが自動的に公開される場合、なぜクラスで実装を宣言する必要があるのですか?インターフェイス宣言が構文的にクラス宣言と同じである場合、コンパイラがインターフェイスからこれを自動的に推測できないのはなぜですか?
編集:
私が尋ねる理由。データモデルやエンティティなどを構築しているシナリオを想像してみてください。これらのモデルへのインターフェイスを次のようにコーディングする場合があります。
public interface IUserAccount
{
Guid Identity { set; get; }
String FirstName { set; get; }
String LastName { set; get; }
String EmailAddress { set; get; }
String Password { set; get; }
}
public interface IUserDataEntry
{
Guid DataIdentity { set; get; }
String DataName { set; get; }
String Data { set; get; }
}
次のようにモデルを作成する方がはるかに簡単です。
public class UserAccount : IUserAccount
{
}
public class UserDataEntry : IUserDataEntry
{
}
public class Combined : IUserAccount, IUserDataEntry
{
}