2010-07-08 8 views
5

Ich lief in den folgenden:uniquess von Methoden und Einschränkungen

public void AddConfig<T>(Config c) where T : BaseTypeA 
{ 
// do stuff 
} 

public void AddConfig<T>(Config c) where T : BaseTypeB 
{ 
// do stuff 
} 

Ich würde gerne in der Lage sein, dies zu tun. Aber ich denke, es ist unmöglich. Der Compiler ignoriert die Einschränkungen. Warum? (Ich weiß, es ist von Entwurf).

Ich glaube, meine zwei Optionen sind:

  1. Make 2 verschiedene Funktionen.
  2. Machen Sie zwei verschiedene Config-Klassen.

Richtig?

+1

Wenn Sie eine generische Methode, die doesn Verwenden Sie den generischen Typ an keiner anderen Stelle in der Methodensignatur, da sonst etwas mit dem Methodenentwurf nicht stimmt. –

Antwort

4

Wenn Sie in derselben Klasse meinen, dann sind Sie richtig (ich glaube nicht, dass der Compiler überprüft, um sicherzustellen, dass BaseTypeA und BaseTypeB nicht ineinander umgewandelt werden können, was Sie überprüfen müssten, um sicherzustellen, dass sie sind) einzigartige Methoden, dh so etwas wie where T : BaseTypeA && T !: BaseTypeB, wenn Sie bekommen, was ich meine).

Having said that aber, warum Sie nicht so etwas wie dies zu tun:

interface IConfigurable 
{ 
     void AddConfig(Config c) 
} 

public class BaseTypeA : IConfigurable 

public class BaseTypeB : IConfigurable 
+1

Schöner Winkel. Daran habe ich nicht gedacht. – Jeroen

4

Einschränkungen sind nicht Teil der Signatur. Das ist Absicht.

Wenn Sie beim Lesen über hundert Kommentare von Leuten interessiert sind, die denken, dass Einschränkungen sollten Teil der Signatur, sehen Sie sich die Kommentare zu meinem geschickten Titel Blog-Eintrag Constraints Are Not Part Of The Signature.

+0

Gutes Stück. Da bin ich aber nie reingelaufen. – Jeroen

Verwandte Themen