最初のものが最初です。私のタイトルは誤解を招くものではないことを願っています。私はそれをフレーズするために最善を尽くしたClass1がすでにInterface1を実装している場合は、Class1を継承してInterface1を実装してください。
以下のコードを参照してください。ケース1はかなり単純です。どちらのケースも期待どおりに動作します。私の質問は、コンパイラがケース2を許可するのはなぜですか?これが望ましい場合、特定のシナリオがありますか?私は1つ考えることができません。
interface IEmployee
{
void Register(string role);
}
abstract class Employee : IEmployee
{
public void Register(string role)
{
Console.WriteLine(role);
}
}
// Case 1
class Manager : Employee
{
}
// Case 2
class Developer : Employee, IEmployee
{
}
class Test
{
public void Test1()
{
IEmployee emp1 = new Manager();
emp1.Register("manager"); // output "manager"
IEmployee emp2 = new Developer();
emp2.Register("developer"); // output "developer"
}
}
あなたは従業員から継承している場合には、従業員がIEmployeeから継承するため、あなたのすでにちょうど従業員からの継承や、IEmployeeから継承両方の代わりにIEmployee。それはあなたの質問に答えるか、それがなぜ機能するのか尋ねていますか? – CalebB
@CalebB私はすでにあなたが説明したことを知っています。問題はなぜケース2が許可されているのですか?そのような設計のユースケースはありますか? – niksofteng
IEmployeeは、必要なすべてのIEmployeeメンバーを実装するEmployeeの継承によって実装されるため、これは許可されています。 IEmployeeを明示的に宣言できるので、私が知る限り行う必要はありません。 Employeeの継承を介してDeveloperクラスのメンバーを実装するためのものです。 – CalebB