ist ToInt32()
Erweiterungs-Methode in C#? speziell Convert.ToInt32()
ist ToInt32() eine Erweiterungsmethode in C#? speziell Convert.ToInt32()
Antwort
auf Nein Daseinsberechtigung der Extension-Methode ist der Instanz Methodenaufruf zu ermöglichen Syntax, die für außerhalb des Typs deklarierte Methoden verwendet werden soll. Sie werden feststellen, dass dies mit keiner der Methoden Convert.ToInt32
möglich ist.
Zum Beispiel hat der Typ String
keine ToInt32(String)
Member-Methode. Wenn Sie ein String
zu einem Int32
konvertieren möchten, können Sie eine statische Methode wie folgt schreiben:
public static class StringConverters
{
public static Int32 ToInt32(String number)
{
return Int32.Parse(
number,
NumberStyles.Integer,
CultureInfo.CurrentCulture.NumberFormat);
}
}
Und es so nennen:
var n = StringConverters.ToInt32("12345");
oder (in einigen Fällen wäre dies akzeptabel sein)
using static StringConverters;
…
var n = ToInt32("12345");
Aber, wenn Sie mit dem Instanzmethodenaufruf Syntax aufrufen möchten, können Sie eine Verlängerung Methode als statische Methode mit dem ersten Parameterwürde erstellenin einer nicht generisch, nicht verschachtelten, statischen Klasse:
public static class StringConverters
{
public static Int32 ToInt32(this String number)
{
return Int32.Parse(
number,
NumberStyles.Integer,
CultureInfo.CurrentCulture.NumberFormat);
}
}
Und es so nennen:
var n = "12345".ToInt32();
Der String
Typ ist immer noch kein ToInt32(String)
Mitglied hat. Es scheint nur, dass die ToInt32
Deklaration diesen Typ erweitert hat. Deshalb wird es eine Erweiterungsmethode genannt.
Sie F12 auf ToInt32 drücken() und Sie können
namespace System
{
public static class Convert
{
public static int ToInt32(object value);
}
}
Also keine Erweiterung, sondern statisch
Die Erweiterung in C# in so etwas wie unten
public static int MethodName(this String str)
{
...
}
sehen Convert.ToInt32()
ist keine Erweiterungsmethode, es ist eine statische Methode innerhalb der statischen Klasse Convert
.
Sie können jedoch eine Erweiterungsmethode zu tun, wie diese erstellen:
public static class MyExtensions
{
public static Int32 ToInt32(this object obj)
{
return Convert.ToInt32(obj);
}
}
Verbrauch:
object obj = 5;
int five = obj.ToInt32();
Wenn Sie im Internet nach Convert.ToInt32 gesucht haben, war die Dokumentation unzureichend? Als du nach einer Erweiterungsmethode gesucht hast, war etwas unklar? Diese Frage ist schlecht erforscht und entspricht nicht dem Aufwand, den wir auf dieser Site erwarten. –
Um @ AnthonyPegram Punkt, während die Convert-Klasse dokumentiert keine seiner Mitglieder als Erweiterung Methoden oder nicht, das ist sagen, denn wenn eine Methode eine Erweiterungsmethode ist, würden die Autoren sicherlich möchten Sie wissen, sonst würden sie nicht haben die Methode zu einer Erweiterungsmethode gemacht. –
@AnthonyPegram nach der Suche im Internet stelle ich die Frage auf dieser Website als Mitglied hier haben unterschiedliche Kenntnisstand – Pavan