methods übergeben - In C#, was ist<T>nach einer Methodendeklaration?




rückgabewerte mehrere (5)

Das T ist ein Typparameter und kann in diesem Fall alles sein (eine Einschränkung kann angegeben werden, aber hier gibt es keine Einschränkung). Ohne diese Funktion müssten Sie die Methode für jeden Typ deklarieren, den Sie verwenden möchten:

static void Foo(params int[] x)    
static void Foo(params string[] x)    
static void Foo(params Customer[] x)    
etc...

Weitere Informationen zu Generika finden Sie in MSDN: Einführung in Generics (C #) .

Ich bin ein VB.Net-Typ. (Weil ich es sein muss, weil die Person, die meinen Scheck unterschreibt, das sagt.: P) Ich bin in Java aufgewachsen und ich kämpfe im Allgemeinen nicht, wenn ich die Chance habe, in C # zu lesen oder zu schreiben. Ich bin heute auf eine Syntax gestoßen, die ich noch nie gesehen habe und die ich scheinbar nicht herausfinden kann.

In der folgenden Methodendeklaration, was bedeutet <T>?

statische Leere Foo <T> (Parameter T [] x)

Ich habe gesehen, in Verbindung mit generischen Sammlungen und Dinge zu erklären, aber ich kann nicht für das Leben von mir herauszufinden, was es für diese Methode tut.

Falls es darauf ankommt, bin ich darauf gestoßen, als ich über einige Denksportaufgaben nachgedacht habe. Der sechste Teaser enthält das gesamte Code-Snippet.


Dies definiert eine generische Methode , die eine Form von generics , die zu C # in C # 2.0 hinzugefügt wurden.

Die Methode sig sollte sein:

static void Foo<T>(params T[] x)
{ // ...

Auf diese Weise können Sie eine beliebige Anzahl von Argumenten eines beliebigen (spezifischen) Typs in die Methode Foo übergeben und auf dieses Array von Argumenten einwirken. Es ist ähnlich wie generische Typen funktionieren, außer nur für die Methode. Das <T> gibt den Typ des Arguments an, das an die Methode übergeben wird. Sie können dies wie folgt aufrufen:

Foo<MyClass>(myClassInstance, myClassInstance2, mySubclassInstance);

Dies ist der generische Typ-Parameter einer generischen Methode.

Sobald Sie beim Aufrufen der Methode einen Typ für T angegeben haben, kann .NET die Typsicherheit basierend auf diesem Typparameter sicherstellen.

static void Foo<T>(params T[] x) { }

würde wie gerufen werden:

string[] names = new string[] {"Foo", "Bar", "Baz"};

Foo<string>(names);

aber das würde einen Compilerfehler verursachen:

int[] nums = new int[] {1, 2, 3};

Foo<string>(nums); // nums is not string[]

Was Sie fragen, ist das Konzept der Generika in c #. Durch die Verwendung von Generika können Sie diese Methode für die gewünschten Typen verwenden

Angenommen, Sie müssen eine Funktion erstellen, um zwei Zahlen hinzuzufügen. In diesem Fall ist Ihre Funktion

//For integer :
public int sum(int a, int b)
{ 
  return a + b;
}



//For floating point numbers :
public float sum( float a, float b)
{
  return a + b;
}

Wenn Sie nach dieser Logik eine Funktion erstellen möchten, die zwei doppelte Zahlen addiert, würden Sie eine weitere Funktion erstellen und so weiter.

Hinweis: Code oben funktioniert nicht mit C #, aber es für die Erklärung Konzept einfach, es nur Sudo-Code wird es mit C # arbeiten, wenn Sie Nullable Typ oder Referenztyp leicht haben oder man muss Logik schreiben, um Wert in Primärtyp zu konvertieren.

Bu mit Hilfe von Generika können Sie alle diese Funktionen ersetzen und schreiben Sie Folgendes,

public T sum<T>(T a, T b)
{
  return a + b;
}

Dies funktioniert für alle numerischen Typen sowie für Strings.

Überprüfen Sie dies für weitere Details: http://www.codeproject.com/kb/books/EssentialCS20.aspx


Um die Substantive zu verstehen, konzentrieren wir uns zuerst auf die Verben.

erklären - offiziell verkünden; proklamieren

Definieren - um (jemanden oder etwas) klar und vollständig zu zeigen oder zu beschreiben

Wenn Sie etwas erklären, sagen Sie einfach, was es ist .

// declaration
int sum(int, int);

Diese Zeile deklariert eine C-Funktion namens sum , die zwei Argumente vom Typ int übernimmt und einen int zurückgibt. Sie können es jedoch noch nicht verwenden.

Wenn Sie angeben, wie es tatsächlich funktioniert , ist das die Definition.

// definition
int sum(int x, int y)
{
    return x + y;
}




c# methods declaration