2015-09-11 2 views
-2

Это в значительной степени имеет смысл для меня использовать интерфейс с сигнатурой/событиями метода и так далее.Кто-нибудь знает какой-либо прецедент для использования интерфейса с только свойствами?

Но, я не могу найти, что используется для использования интерфейсов с properties. (Я знаю, свойства методы под капотом, и они инкапсулировать, и вы можете написать код на get/set accessor и тому подобное.

Что я за это use case для интерфейса со свойствами, которая действует как fields. (just get and set values).

Например , если у меня есть интерфейс с методами, я могу использовать разные реализации во время выполнения, имеет преимущества, используя полиморфизм, прохождение другой реализации на основе интерфейса, и мне легче высмеивать модульные тесты. Но если у меня есть класс, и я знаю он просто будет содержать свойства (например, DTO). Почему я хочу создать интерфейс для класса DTO? Есть ли какой-либо вариант использования?

Я отметил java, потому что это не технический вопрос, и у них есть метод mutator, аналогичный get/set accessor.

Спасибо.

+2

Почему вы отметили это с помощью java? –

+0

@ElliottFrisch Возможно, они означают свойства bean - 'getXXX()', 'setXXX()' – jdphenix

+0

В Java такие варианты использования включают [Value Object] (https://en.wikipedia.org/wiki/Value_object) и/или [Transfer Object] (http://www.oracle.com/technetwork/java/transferobject-139757.html). Но я думаю, что это часто проявляется в моделировании модели ([сущность-представление] (http://web.cse.ohio-state.edu/~gurari/course/cse670/cse670Ch2.xht)). –

ответ

1

Оказалось, что в структуре существует немало интерфейсов, которые содержат только свойства, например. System.IAsyncResult. Вы можете найти другие варианты использования, просматривая MSDN.

ИМХО, свойства не имеют ничего особенного по сравнению с методами. Вы всегда можете преобразовать свойство R/W в пару методов Get/Set и преобразовать R/- свойство в метод Get или наоборот. Решение для интерфейса, состоящего из чисто свойств, должно быть выполнено в том же процессе, что и для «нормального» интерфейса.

+0

Я знаю, что интерфейс не может содержать поля. Я просто любопытный в случае использования для создания интерфейсов с просто свойствами (без какой-либо логики в методе get и set в разработчике, в основном как поля) –

+0

Интерфейсы не имеют логики. Свойство в интерфейсе требует только типов реализации, чтобы публичные свойства отображались и не были автоматически реализованы. – jdphenix

+0

@ ZammyPage Обновлено. В рамках существует довольно много интерфейсов с только свойствами. –

0

Свойства в интерфейсах имеют те же варианты использования, что и другие части интерфейсов - они обеспечивают общий интерфейс для взаимодействия с типом, реализующим этот интерфейс.

Обратите внимание, что свойства в интерфейсах отличаются от свойств в классах.

interface IInterface 
{ 
    int Foo { get; } 
} 

class Class 
{ 
    int Foo { get; set; } 
} 

В этом коде IInterface.Foo является не авто Реализуемых собственностей, в то время как Class.Foo есть.

Примеры в BCL включают:

// Get the count of items of any ICollection implementation, 
// including (not limited to) List<T>, Dictionary<TKey, TValue>, 
// and HashSet<T> 
int ICollection<T>.Count { get; } 

// gets the current element of any implementation of IEnumerator<T> 
T IEnumerator<T>.Current { get; } 
+0

Я вижу технические отличия и обычаи. Я хочу знать, что касается реальных обычаев, какие преимущества мы можем получить с интерфейсом с просто свойствами. –

0

Интерфейсы играют важную роль во многих шаблонов проектирования линии Инверсия контроля, Dependency Inversion, и многие другие. мы можем использовать наследование для того же самого, но если есть нарушение отношения is-a, тогда мы можем пойти на реализацию.