Предположим, у меня есть интерфейс IFoo и класс Foo, который реализует IFoo.Я хочу определить свою собственную логику для определения, равны ли 2 экземпляра Foo на основе содержащихся в них данных, и перегружать операторы == &! = Для простоты использования при работе с Foo.
Если у меня 2экземпляры Foo, оба хранятся как Foo, тогда это работает нормально.Однако, если у меня есть 2 экземпляра, оба хранятся как IFoo, внезапно мои перегруженные операторы больше не вызываются.Кроме того, поскольку я не могу определить оператор в своем интерфейсе IFoo, и хотя бы один из аргументов в моей перегрузке оператора Foo должен иметь тип Foo, я не вижу, как можно успешно перегрузить оператор в моем типе,Это правильно?
Кроме того, кто-нибудь может прояснить, почему это происходит?Обычно я ожидаю, что тот факт, что мои Foos хранятся как IFoos, не имеет значения при определении, какая функция равенства вызывается, поскольку по сути они все еще Foos!
Любая помощь действительно ценится
Спасибо
Редактировать: Хорошо, так как, кажется, есть некоторая путаница в том, что я имею в виду, вот пример, который, надеюсь, немного прояснит:
public interface IFoo
{
}
public class Foo : IFoo
{
public static bool operator==(Foo left, Foo right)
{
....
}
}
Foo foo1 = new Foo();
Foo foo2 = new Foo();
bool comparison1 = foo1 == foo2 //This is successfully calling the overloaded operator
IFoo ifoo1 = foo1;
IFoo ifoo2 = foo2;
bool comparison2 = ifoo1 == ifoo2 //This isn't