Пусть у нас есть два члена, равные по сигнатуре, но один статичен, а другой нет:
class Foo
{
public void Test() { Console.WriteLine("instance"); }
public static void Test() { Console.WriteLine("static"); }
}
но такая генерация кода приводит к ошибке компилятора:
Тип «Foo» уже определяет член с именем «Test» с такими же типами параметров
Но почему?
Пусть мы скомпилировали это успешно, тогда:
Foo.Test ()
должен вывести «static»
new Foo (). Test ();
должен вывести «instance»
Невозможно вызвать статический член вместо экземпляра один, потому что в этом случае произойдет другая, более разумная ошибка компилятора:
К члену «Foo.Test ()» нельзя получить доступ с помощью ссылки на экземпляр; вместо этого укажите имя типа