Авто Свойство, которое возвращает интерфейс
Это что-то любопытное, что я видел сегодня в своем коде.
Вот пример кода:
public class SomeClass
{
public IUtils UtilitiesProperty { get; set; }
}
public interface IUtils
{
void DoSomething();
}
public class Utils : IUtils
{
void DoSomething();
}
Это хорошо компилируется.
Так что же такое UtilitiesProperty? Это Утиль? Что если в IUTil реализовано несколько классов? Будет ли сбой компиляции тогда?
2 ответа
Это не имеет никакого значения, пока вы не дадите ему одно (или, скорее, оно имеет значение null
). Если вы назначите это Utils
ссылка, то да: это Utils
, выставленный через IUtils
интерфейс. Вы можете только дать это null
или вещи, которые реализуют IUtils
,
Это свойство может содержать объект, который реализует ваш интерфейс IUtils. Другие классы могут реализовывать этот интерфейс, и использование интерфейса позволяет получить уровень абстракции (потребителю все равно, пока класс придерживается контракта интерфейса).
Я бы посоветовал вам ознакомиться с использованием интерфейсов, абстрактных классов и тому подобного.
Например, документы MSDN.