9 Stimmen

Hat C# ein Äquivalent zur Kategorie von Objective-c?

Ich bin auf der Suche nach einem Äquivalent zu Objective-c's Category für die Sprache C#.

14voto

Morten Punkte 4294

Sie können keine Methoden zu einer Klasse hinzufügen, aber Sie können Erweiterungsmethoden verwenden, um ähnliche Effekte zu erzielen.

eine statische Klasse mit einer statischen Methode erstellen. Das erste Argument der statischen Methode wird mit "this" gekennzeichnet und die Methode wird für die Klassen mit dem Typ des Arguments dekoriert.

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

Diese Methode ist dann für alle Instanzen des Typs String verfügbar. Allerdings müssen Sie die Erweiterungsklasse immer noch über Ihre Verwendungen verfügbar haben.

Das Beispiel stammt aus einem Dokument von Microsoft, das hier verfügbar ist: http://msdn.microsoft.com/en-us/library/bb383977.aspx

5voto

Enrico Campidoglio Punkte 51948

Das, was dem am nächsten kommt Objective-C Kategorien in C# ist Methoden der Erweiterung .

Beachten Sie, dass C# ist eine statisch typisierte Sprache und verwendet kein dynamisches Dispatching wie Objective-C. Das bedeutet, dass die Methodenauflösung wird zur Kompilierzeit durchgeführt und nicht zur Laufzeit, wie Sie es von Objective-C gewohnt sind.

Verwandte Ressourcen:

3voto

MrKWatkins Punkte 2539

Erlauben es Kategorien nicht, Methoden zu bestehenden Klassen hinzuzufügen, ohne sie zu unterklassifizieren? Wenn ja, dann wären Erweiterungsmethoden das C#-Äquivalent. Sie ersetzen jedoch nicht die vorhandenen Methoden und unterliegen einigen Einschränkungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X