web-dev-qa-db-fra.com

Dans C #, qu'est-ce que <t> après une déclaration de méthode?

Je suis un gars vb.net. (Parce que je dois être, parce que la personne qui signe mon chèque le dit.: P) j'ai grandi dans Java et je ne luttez généralement pas pour lire ou écrire en C # quand je reçois la chance. Je suis tombé sur une syntaxe aujourd'hui que je n'ai jamais vu et que je ne peux pas sembler comprendre.

Dans la déclaration de méthode suivante, qu'est-ce que <t> représente?

void statique FOO <T> (paramètres t [] x)

J'ai vu conjointement conjointement avec des collections génériques et des choses, mais je ne peux pas pour la vie de moi de comprendre ce que cela fait pour cette méthode.

Au cas où cela importait, je suis tombé sur celui-ci en pensant à certains c # cérébraux . Le sixième teaser contient tout l'extrait de code.

27
Drew

Cela définit une méthode générique , qui est une forme de génériques , qui ont été ajoutés à C # en C # 2.0.

La méthode SIG devrait être:

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

Cela vous permet de transmettre un nombre quelconque d'arguments de type (spécifique) dans la méthode FOO et agit sur cette gamme d'arguments. Il est similaire à la manière dont les types génériques fonctionnent, à l'exception de FLOPED Juste à la méthode. Les <T> Spécifie le type de l'argument transmis dans la méthode, de sorte que vous pouvez appeler cela comme:

Foo<MyClass>(myClassInstance, myClassInstance2, mySubclassInstance);
23
Reed Copsey

ce que vous demandez est le concept des génériques en C #. En utilisant des génériques, vous pouvez utiliser cette méthode pour les types souhaités.

supposons que vous ayez à créer une fonction pour ajouter deux chiffres. Dans ce cas, votre fonction est

//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;
}

En suivant cette logique, si vous souhaitez une fonction qui résumera deux numéros de type double, vous créeriez une fonction de plus, etc.

Remarque: Le code ci-dessus ne fonctionnera pas avec C #, mais pour expliquer le concept facilement, il suffit de le code sudo, il fonctionnera avec C # si vous avez nullable type ou Type de référence Facilement ou il faut écrire la logique pour convertir la valeur en type primaire.

Bu avec l'aide de génériques, vous pouvez remplacer toutes ces fonctions et écrire ce qui suit,

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

Cela fonctionnera pour tous les types numériques, ainsi que pour les chaînes.

vérifiez cela pour plus de détails: http://www.codeproject.com/kb/books/essentialcs20.aspx

28
Pranay Rana

C'est le paramètre de type générique d'une méthode générique.

Une fois que vous avez spécifié un type pour T lorsque vous appelez la méthode, .NET peut assurer la sécurité de type en fonction de ce paramètre de type.

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

serait appelé comme:

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

Foo<string>(names);

mais cela provoquerait une erreur de compilateur:

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

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

Le T est un type paramètre et dans ce cas peut être n'importe quoi (une contrainte peut être spécifiée, mais ici il n'y a pas de contrainte). Sans cette fonctionnalité, vous devez déclarer la méthode de chaque type que vous prévoyez d'utiliser:

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

Plus d'informations sur les génériques sont disponibles sur MSDN: Introduction aux génériques (C #) .

1
Mark Byers