Нет.Ваши методы foo
ожидают либо Class1
, либо Class2
.Вы передаете IInterface
, который может быть либо Class1
, либо Class2
.Он не скомпилируется, потому что компилятор не знает, какой перегруженный метод вызывать.Вам придется привести его к одному из типов, чтобы заставить его скомпилировать.
В качестве альтернативы IInterface
будет содержать метод foo
, который не принимает аргументов и возвращает какой класс он был.Тогда что-то может взять объект IInterface
и вызвать obj.foo()
Как:
interface IInterface
{
public string foo();
}
class Class1 : IInterface
{
public string foo()
{
return "Class1";
}
}
class Class2 : IInterface
{
public string foo()
{
return "Class2";
}
}
public void Something(IInterface obj)
{
return obj.foo();
}