Авто Свойство, которое возвращает интерфейс

Это что-то любопытное, что я видел сегодня в своем коде.

Вот пример кода:

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.

Другие вопросы по тегам