У меня очень простой вопрос, но раньше у меня не было этой проблемы.Интерфейс, ссылающийся на другой интерфейс, но класс, ссылающийся на другой класс в C#
Посмотрите на этот код:
interface IFoo
{
IBar MyBar { get; }
}
interface IBar
{
String Test { get; }
}
class Foo : IFoo
{
public Bar MyBar { get; set; }
}
class Bar : IBar
{
public String Test { get; set; }
}
Проблема заключается в том, что Foo не реализует IFoo, поскольку она возвращает панель, а не IBar. Но я не вижу проблемы, поскольку Bar реализует IBar. Я что-то пропустил?
Я хочу, чтобы мое приложение использовало класс Foo, но выставлять IFoo для других частей решения.
Это путь вокруг него, но мне кажется, как уродливое решение:
class Foo : IFoo
{
public Bar MyBar { get; set; }
IBar IFoo.MyBar {
get { return this.MyBar; }
}
}
Является ли это путь, или это может быть лучше?
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. –
Это называется ковариацией возвращаемого типа и согласно [этому сообщению] (http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance) C# и CLR не поддерживает его , – Dirk
«Уродливый путь» (также известный как явная реализация интерфейса) действительно является единственным способом решения этой проблемы на C#. Фактически, это часть причины, по которой функция существует в первую очередь. – dasblinkenlight