2009-10-21 10 views
17

Czy ktoś może mi pomóc z linią where TEntity : class, IEntity, new() w poniższej deklaracji klasy."gdzie" słowo kluczowe w deklaracji klas wc c

public abstract class BaseEntityManager<TEntity> 
     where TEntity : class, IEntity, new() 
+2

A twoje pytanie? –

+4

Myślę, że prosi o wyjaśnienie składni. – Matt

Odpowiedz

28

where TEntity : ... stosuje ograniczenia do parametru ogólnego TEntity. W tym przypadku ograniczenia są:

klasa: Argument TEntity musi być typem odniesienia
IEntity: Argument musi być albo implementować interfejs IEntity
new(): Argument musi mieć konstruktora bez parametrów publicznego

Od http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+0

Jeśli mógłbyś dodać kod pokazujący, jak ktoś mógłby użyć BaseEntityManager jako klasy bazowej, która byłaby niesamowita :) – niico

4

where kluczowe po deklaracji klasy, co ogranicza typ rodzajowy TEntity może być. W tym przypadku TEntitymusi być klasą (co oznacza, że ​​nie może być typem wartość jak int lub DateTime), i musi implementować interfejs IEntity. Ograniczenie new() wskazuje, że metody wewnątrz tej klasy mają możliwość wywoływania domyślnego konstruktora klasy ogólnej reprezentowanej przez TEntity (np. new TEntity())

-1

Na czym polega pytanie?

Pozwólcie, że rzucę okiem na to, co myślę, że to pytanie. Ograniczenie zapewnia, że ​​można tylko podklasę BaseEntityManager z ogólnym parametrem, który jest typem odniesienia implementującym IEntity i zawierającym konstruktor bez parametrów.

E.X.

public class Product : IEntity { 
    public Product() {} 
} 

public class Wrong { 
    public Wrong() {} 
} 

public class WrongAgain : IEntity { 
    private Wrong() {} 
} 


// compiles 
public ProductManager : BaseEntityManager<Product> {} 


// Error - not implementing IEntity 
public WrongManager : BaseEntityManager<Wrong> {} 


/Error - no public parameterless constructor 
public WrongAgainManager : BaseEntityManager<WrongAgain> {} 

zobaczyć link text

+0

"Czy ktoś mógłby mi pomóc z linią ...?" Oto jest pytanie. To oczywiste, o co pyta. –