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