Frage

Wie ist es möglich, Prototypmethoden in C#.Net zu erstellen?

In JavaScript kann ich Folgendes tun, um eine Trimmmethode für das String-Objekt zu erstellen:

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

Wie kann ich das in C#.Net machen?

War es hilfreich?

Lösung

Sie können Methoden nicht dynamisch zu vorhandenen Objekten oder Klassen in .NET hinzufügen, es sei denn, Sie ändern die Quelle für diese Klasse.

Sie können jedoch in C# 3.0 Erweiterungsmethoden verwenden, die sehen wie neue Methoden, sind aber zur Kompilierungszeit magisch.

So gehen Sie für Ihren Code vor:

public static class StringExtensions
{
    public static String trim(this String s)
    {
        return s.Trim();
    }
}

Um es zu benutzen:

String s = "  Test  ";
s = s.trim();

Dies sieht aus wie eine neue Methode, wird aber genauso kompiliert wie dieser Code:

String s = "  Test  ";
s = StringExtensions.trim(s);

Was genau wollen Sie erreichen?Vielleicht gibt es bessere Möglichkeiten, das zu tun, was Sie wollen?

Andere Tipps

Es hört sich so an, als ob Sie über die Erweiterungsmethoden von C# sprechen.Sie fügen vorhandenen Klassen Funktionalität hinzu, indem Sie das Schlüsselwort „this“ vor dem ersten Parameter einfügen.Die Methode muss eine statische Methode in einer statischen Klasse sein.Strings in .NET verfügen bereits über eine „Trim“-Methode, daher verwende ich ein anderes Beispiel.

public static class MyStringEtensions
{
    public static bool ContainsMabster(this string s)
    {
        return s.Contains("Mabster");
    }
}

Jetzt verfügt jeder String über eine äußerst nützliche ContainsMabster-Methode, die ich wie folgt verwenden kann:

if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }

Beachten Sie, dass Sie auch Erweiterungsmethoden zu Schnittstellen hinzufügen können (z. B. IList), was bedeutet, dass jede Klasse, die diese Schnittstelle implementiert, diese neue Methode ebenfalls übernimmt.

Alle zusätzlichen Parameter, die Sie in der Erweiterungsmethode deklarieren (nach dem ersten „this“-Parameter), werden als normale Parameter behandelt.

Sie müssen eine Erweiterungsmethode erstellen, die .NET 3.5 erfordert.Die Methode muss statisch sein und sich in einer statischen Klasse befinden.Dem ersten Parameter der Methode muss in der Signatur „this“ vorangestellt werden.

public static string MyMethod(this string input)
{
    // do things
}

Man kann es dann so nennen

"asdfas".MyMethod();

Mit dem 3.5-Compiler können Sie eine Erweiterungsmethode verwenden:

public static void Trim(this string s)
{
  // implementation
}

Sie können dies für ein auf CLR 2.0 ausgerichtetes Projekt (3.5-Compiler) verwenden, indem Sie diesen Hack einbinden:

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
  public sealed class ExtensionAttribute : Attribute
  {
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top