2016-07-23 15 views
-1

ist ToInt32() Erweiterungs-Methode in C#? speziell Convert.ToInt32()ist ToInt32() eine Erweiterungsmethode in C#? speziell Convert.ToInt32()

+0

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. –

+0

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. –

+0

@AnthonyPegram nach der Suche im Internet stelle ich die Frage auf dieser Website als Mitglied hier haben unterschiedliche Kenntnisstand – Pavan

Antwort

3

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.

1

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) 
{ 
    ... 
} 
4

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();