Подтвердить что ты не робот

В С#, что такое <T> После объявления метода?

Я парень VB.Net. (потому что я должен быть, потому что человек, который подписывает мой чек, говорит так: P) Я вырос на Java, и я вообще не пытаюсь читать или писать на С#, когда у меня появляется такая возможность. Сегодня я наткнулся на какой-то синтаксис, которого я никогда не видел, и что я не могу понять.

В следующем объявлении метода, что делает <T> представляют?

static void Foo <T> (параметры T [] x)

Я видел, что он используется вместе с объявлением общих коллекций и вещей, но я не могу для жизни понять, что он делает для этого метода.

В случае, если это имеет значение, я натолкнулся на него, когда подумал о некоторых мозговых дразнях С#. Шестой тизер содержит весь фрагмент кода.

4b9b3361

Ответ 1

Это определяет общий метод, который является одной из форм generics, которые были добавлены в С# в С# 2.0.

Метод sig должен быть:

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

Это позволяет передавать любое количество аргументов любого (определенного) типа в метод Foo и действует на этот массив аргументов. Он похож на то, как работают общие типы, за исключением области только для метода. <T> указывает тип передаваемого аргумента в метод, поэтому вы можете называть это следующим образом:

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

Ответ 2

то, что вы просите, - это концепция дженериков в С#. Используя общие методы, вы можете использовать этот метод для типов, которые вы хотите

Предположим, вам нужно создать функцию для добавления двух чисел. В этом случае ваша функция

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

Следуя этой логике, если вы хотите функцию, которая будет суммировать два двойных типа, вы должны создать еще одну функцию и т.д.

Bu с помощью дженериков вы можете заменить все эти функции и написать следующее,

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

Это будет работать для всех числовых типов, а также для строк.

проверьте это для более подробной информации: http://www.codeproject.com/kb/books/EssentialCS20.aspx

Ответ 3

Это параметр Generic Type универсального метода.

Как только вы укажете тип для T при вызове метода,.NET может обеспечить безопасность типа на основе этого параметра.

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

будет вызываться как:

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

Foo<string>(names);

но это вызовет ошибку компилятора:

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

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

Ответ 4

T является параметром и в этом случае может быть любым (может быть указано ограничение, но здесь нет ограничения), Без этой функции вам придется объявить метод для каждого типа, который вы планируете использовать:

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

Более подробную информацию о дженериках можно найти в MSDN: Введение в Generics (С#).