2010-10-17 10 views
5

Mam tu mały problem.Umowy dotyczące kodu: ContractClassDo postępowania z ogólną klasą abstrakcyjną?

Załóżmy, że mam:

public class Repository<TEntity> 
    where TEntity : class 
{ 
    public abstract void Add(TEntity entity); 

    // ...and so on... 
} 

A teraz chcę, aby zdefiniować klasę umowy, tak jak poniżej:

public class RepositoryContracts<TEntity> : Repository<TEntity> 
    where TEntity : class 
{ 
    public void Add(TEntity entity) 
    { 
     Contract.Requires(entity != null); 
    } 

    // ...etc... 
} 

Teraz będę musiał oznaczyć te zajęcia z ContractClassAttribute i ContractClassForAttribute. Problem jest, to nie będzie działać:

[ContractClassFor(typeof(Repository<TEntity>))] // what is TEntity?! error! 

Więc pytanie sprowadza się do tego: Jak połączyć te dwie klasy razem za pomocą tych atrybutów, gdy są rodzajowe?

Odpowiedz

5

Okazało się, że jest to duplikat this question, w pewnym sensie.

Składnia typeof (Repository <>) nie działa dla mnie, ale okazuje się, że typeof (Repository <,>) działa, ponieważ istnieją dwa parametry typu.

Zamknięcie pytania i dodanie komentarza do the previous one.

+0

Mam ten sam problem, usuwając ogólny "TEntity", rozwiązałem go, ale kiedy "implementuję" ten "interfejs" w jakiejś innej "klasie", skarży się, że 'class' lub' interface' nie implementuje metod IRepository . Jakieś pomysły ? –

Powiązane problemy