2012-07-08 7 views
5

Ich hoffe, es gibt einen cleveren Weg, dies zu tun. Ich habe einen generischen Basisdienst, der mehrere Methoden hat ... Daher gibt es derzeit einige Methoden in dieser Basisklasse wie Create (T obj). Was ich möchte, ist, dass der Compiler eine intuitivere Parameternamen zu erstellen (basierend off einiger Regel), so dass, wenn eine konkrete Instanz des Basisdienst wird wie folgt erstellt:Erstellen aussagekräftige Parameternamen mit Generics

public class ProductService : BaseService<Product> 

ich will es kompilieren die Product Verfahren dazu (zum Beispiel):

public Product Create(Product product) 

statt

public Product Create(Product obj) 

ich weiß, es klingt kleinere, aber ein Praktikant hat mich gebeten, den anderen Tag und ich konnte ihn nicht 100% sagen sicher, dass es war nicht möglich.

+2

Ich weiß nicht von irgendeiner Weise wissen zu erreichen, was Sie fordern, aber auch Die Verwendung von "Entität" im Zusammenhang mit "obj" würde für mich mehr Sinn ergeben, wenn ich Ihren Code lese. Vor allem, wenn die Klasse von einer 'IEntity'-Schnittstelle oder von einer Basis-' Entity'-Klasse geerbt wurde. – Paul

+0

In der Tat ... vereinbart ... – Rikon

Antwort

3

Soweit ich weiß, gibt es keine Möglichkeit, dies automatisch zu erreichen. Allerdings, wenn Sie es wirklich wollten sowieso tun, könnten Sie die Methode virtual in BaseService machen und es in jeder Unterklasse außer Kraft setzen:

public override Product Create(Product product) { 
    return base.Create(product); 
} 
+2

Ich stimme zu, das ist wahrscheinlich der beste Weg, um das zu erreichen, was das Poster verlangt, aber das klingt nach viel Aufwand für einen wirklich kleinen Vorteil. Ich würde nicht empfehlen, es tatsächlich zu tun, aber es würde funktionieren. –

+0

@ JonathanRupp: +1; vereinbart - insbesondere, weil "Produkt obj" oder "Product entity" noch semantisch sinnvoll ist. –

+0

Yeah ... Manchmal gibt es diese kleinen Untertitel, die ich gelegentlich vermisse ... Ich habe gehofft, dass so etwas wie public void Einfügen (T @@ T.GetType(). Name.ToLower()) Mit dieser Mentalität konnte ich Zeit zum Nachdenken über T zusammenstellen ... Aber naja ... in ein nettes, mit dem clr-Team zu haben, denke ich ... – Rikon