在C#中,什么是方法声明后?

我是VB.Net的人。 (因为我必须这样做,因为签署我的支票的人是这样说的。:P)我是在Java中长大的,当我有机会时,我通常不会在C#中阅读或写作。 我今天遇到了一些我从未见过的语法,而且我似乎无法弄明白。

在以下方法声明中,表示什么?

static void Foo (params T [] x)

我已经看到与声明generics集合和事物一起使用,但我不能为我的生活弄清楚它对这种方法的作用。

如果它很重要,我在考虑一些C#脑筋急转弯时遇到过它。 第六个预告片包含整个代码段。

这定义了一种generics方法 ,它是generics的一种forms,在C#2.0中被添加到C#中。

方法sig应该是:

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

这允许您将任意(特定)类型的任意数量的参数传递给方法Foo,并且它作用于该参数数组。 它与generics类型的工作方式类似,只是作用于方法。 指定传递给方法的参数的类型,因此您可以这样调用:

 Foo(myClassInstance, myClassInstance2, mySubclassInstance); 

你问的是c#中generics的概念。 通过使用generics,您可以将此方法用于所需的类型

假设你必须创建一个函数来添加两个数字。 在这种情况下,你的function是

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

遵循这个逻辑,如果你想要一个将两个双重类型数相加的函数,你将创建另一个函数,依此类推。

注意:上面的代码不适用于C#,但是它可以很容易地解释概念,它只是sudo代码,它可以与C#一起工作,如果你容易拥有可空的类型或引用类型,或者需要编写逻辑来将值转换为主类型。

在generics的帮助下,您可以替换所有这些函数并编写以下内容,

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

这适用于所有数字类型以及字符串。

请查看更多详细信息: http : //www.codeproject.com/kb/books/EssentialCS20.aspx

这是通用方法的Generic Type参数。

在调用方法时为T指定类型后,.NET可以根据该类型参数确保类型安全。

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

会被称为:

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

但这会导致编译器错误:

 int[] nums = new int[] {1, 2, 3}; Foo(nums); // nums is not string[] 

T是一个类型参数 ,在这种情况下可以是任何东西(可以指定约束,但这里没有约束)。 如果没有此function,您必须为计划使用的每种类型声明方法:

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

有关generics的更多信息可以在MSDN上找到: generics简介(C#) 。