2016-09-12 3 views
3

У меня есть интерфейс IArticle с несколькими реализациями: ProductType, RawMaterial, PaintType и т.д.Тип интерфейса Переопределение реализации другого интерфейса

Тогда у меня есть то, что я считаю ссылку (SKU), который является составной элемент между IArticle и Color:

public interface IReference 
{ 
    Color Color { get; set; } 
    IArticle Article { get; set; } 
} 

Тогда у меня есть несколько реализаций, каждая из которых имеет соответствующую реализацию IArticle:

  • Product : IReference будет иметь ProductType, как Article,
  • SemifinishedGood: IReference будет иметь RawMaterial, как Article
  • Paint : IReference будет иметь PaintType, как Article

Так дело в том, ... как я могу переопределить Article типа, что-то вроде этого:

public class Paint: IReference 
{ 
    public virtual Color Color { get; set; } 
    public virtual PaintType Article { get; set; } 
} 

Чтобы я мог получить доступ к PaintType конкретным свойствам вместо того, чтобы быть только IArticle, когда я имею дело с Paint.Article без необходимости бросать каждый раз? Что не так в этой архитектуре?

+0

Итак, почему 'public virtual' в вашей реализации' Paint'? Там не кажется большой причиной для этого. – Jamiec

+0

@Jamiec это для NHibernate, который должен быть виртуальным. – Pinx0

ответ

7

Generic type parameters решить это очень легко.

public interface IReference<TArticle> where TArticle : IArticle 
{ 
    Color Color { get; set; } 
    TArticle Article { get; set; } 
} 

public class Paint : IReference<PaintType> 
{ 
    public virtual Color Color { get; set; } 
    public virtual PaintType Article { get; set; } 
} 
+1

Ударьте меня на 1 секунду! Вы также должны показать, как объявить тип «Paint». –

+0

Я не думаю, что есть необходимость дублировать ответ. Красиво сделано. –

+1

Там; Я их скомбинировал :) –