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