私のプロジェクトでは、コンパイル時のエラーがないため、C# で完全に有効と思われる奇妙な状況を見つけました。
簡単な例は次のようになります。
using System;
using System.Collections.Generic;
namespace Test
{
interface IFoo
{
void FooMethod();
}
class A
{
public void FooMethod()
{
Console.WriteLine("implementation");
}
}
class B : A, IFoo
{
}
class Program
{
static void Main(string[] args)
{
IFoo foo = new B();
foo.FooMethod();
}
}
}
そのようなコードはコンパイルされます。ただし、メソッドは実装されておらず、実装されていないA
ことに注意してください。私の場合、偶然(リファクタリング後)、同じシグネチャを持つメソッドがあります。しかし、なぜインターフェイスの実装方法を知っている必要があるのでしょうか? それが存在することさえ知りません。IFoo
B
IFoo
A
A
FooMethod
IFoo
A
IFoo
私にとって、そのようなデザインを持つことは危険です。インターフェイスを実装するたびに、このインターフェイスの各メソッドが基本クラスのメソッドと「干渉」するかどうかを確認する必要があるためです。
これが「純粋な C# 機能」の場合は? それはなんと呼ばれていますか?何か不足していますか?