Generische Methode mit Einschränkung mehrerer Typen

08/02/2010 - 20:26 von Thomas Kehl | Report spam
Hallo.

Ich habe folgende generische Methode erstellt:

public List<T> GetDataSource<T>(bool refresh) where T: IEntity, new()
{
}

Nun ist es so, dass es mehrere Klassen gibt, die IEntity
implementieren. Ich möchte das nun noch stàrker einschrànken.
z.B. gibt es die Klasse
Customer, Article, Offer, Invoice usw. - diese implementieren alle
IEntity.
Die Methode GetDataSource soll aber nur für die Typen Offer und
Invoice gültig sein. Leider kann ich die Klassen nicht durch ein
weiteres Interface erweitern, da diese nicht von mir stammen.
Gibt es eine Möglichkeit, über die where-Clause die Einschrànkung zu
verfeinern?

Besten Dank für eure Hilfe!

Viele Grüsse, Thomas
 

Lesen sie die antworten

#1 Frank Dzaebel
08/02/2010 - 21:52 | Warnen spam
Hallo Thomas,

Ich habe folgende generische Methode erstellt:
public List<T> GetDataSource<T>(bool refresh) where T: IEntity, new()
{}
Nun ist es so, dass es mehrere Klassen gibt, die IEntity
implementieren. Ich möchte das nun noch stàrker einschrànken.
z.B. gibt es die Klasse Customer, Article, Offer, Invoice usw.
- diese implementieren alle IEntity.
Die Methode GetDataSource soll aber nur für die Typen Offer und
Invoice gültig sein. Leider kann ich die Klassen nicht durch ein
weiteres Interface erweitern, da diese nicht von mir stammen.



Nur ein Ausblick: über "Code Contracts" sollte das möglich sein,
das funktioniert auch mit Interfaces
-> Contract.Requires( typeof(T).IsAssignableFrom ...
Zusammen mit Pex kann Dir das (noch mehr) helfen, wobei Du
hier wohl nur an der reinen statischen Analyse interessiert bist.
Du kannst sogar Bedingungen angeben, die am Ende der Methode
erfüllt sein müssen, und und ...

[Code Contracts]
http://msdn.microsoft.com/en-us/dev...91992.aspx

[Pex - Release Notes - Microsoft Research]
http://research.microsoft.com/en-us...notes.aspx

(beide sollen ~etwa zur Release-Zeit von VS 2010 -
also etwa Mitte April 2010 auch released werden).
______________

Das einzige ist, dass diese Constraints über die Contracts
*sehr* strikt sind. Das Tool entdeckt die unmöglichsten Stellen ;-)


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen