2009-02-08 4 views
6

Wie überschreiben oder erweitern. NET Hauptklassen. zum BeispielMöglich, die String-Klasse in .net zu erweitern

public class String 
{ 
    public boolean contains(string str,boolean IgnoreCase){...} 
    public string replace(string str,string str2,boolean IgnoreCase){...} 
} 

nach

string aa="this is a Sample"; 
if(aa.contains("sample",false)) 
{...} 

ist es möglich?

Antwort

22

Die String-Klasse ist versiegelt, sodass Sie sie nicht erben können. Erweiterungsmethoden sind die beste Wahl. Sie haben die gleichen fühlen als Instanz Methoden ohne die Kosten der Vererbung.

Sie müssen VS 2008 verwenden, um Erweiterungsmethoden zu verwenden.

+0

@JaredPar: Eine Korrektur, Sie benötigen VS 2008 nicht, um Erweiterungsmethoden zu verwenden. Sie benötigen den C# -Compiler für C# 3.0 in .NET 3.5. VS 2008 ist nur die IDE und nicht was die Funktionalität bereitstellt. – casperOne

+2

@ casperOne, richtig. Normalerweise sage ich VS 2008, weil es bekannter ist. Was noch mehr Spaß macht, ist, dass Sie 2.0-Anwendungen mit Erweiterungsmethoden kompilieren können, wenn Sie Ihr eigenes Erweiterungsattribut angeben. http://blogs.msdn.com/jaredpar/archive/2007/11/16/extension-methods-without-3-5-framework.aspx – JaredPar

+3

@casperOne - um das bei Ihnen zurück zu drehen, "oder Mono 2.0"; -p –

2

Die String-Klasse ist versiegelt, Sie können sie also nicht erweitern. Wenn Sie Features hinzufügen möchten, können Sie entweder Erweiterungsmethoden verwenden oder sie in eine eigene Klasse umwandeln und alle zusätzlichen Funktionen bereitstellen, die Sie benötigen.

0

Sie können auch ein Adaptermuster verwenden, um zusätzliche Funktionen hinzuzufügen. Sie können den Operator überladen, damit er sich wie die eingebaute Zeichenfolge anfühlt. Natürlich wird dies nicht automatisch für existierende Verwendungen von "String" sein, aber Ihre Lösung würde es auch nicht direkt erben, wenn es möglich wäre.

1

Im Allgemeinen sollten Sie versuchen zu sehen, ob es eine andere Methode gibt, die Ihre Bedürfnisse in ähnlicher Weise beantwortet. In Ihrem Beispiel ist Contains eigentlich eine Wrapper-Methode zu IndexOf, geben Sie true zurück, wenn der zurückgegebene Wert größer als 0 ist, andernfalls false. Wie es passiert, hat die IndexOf Methode eine Anzahl von Überlastungen, von denen eine IndexOf(string, StringComparison): Int32 ist, die angegeben werden kann, um zu beachten oder zu ignorieren.

Weitere Informationen finden Sie unter String.IndexOf Method (String, StringComparison) (System), obwohl das Beispiel ein wenig seltsam ist.

Siehe StringComparison Enumeration (System) für die verschiedenen verfügbaren Optionen bei Verwendung der StringComparison Aufzählung.

+0

es war eine gute Idee – ebattulga

Verwandte Themen