首页 新闻 会员 周边 捐助

园子里的老哥们,我在C#泛型中总觉得自己脑子不够用,帮忙看看这个问题

0
[已解决问题] 解决于 2016-06-29 09:17

public Class SortHelper
{
public void BubbleSort(T[] array)
{
int length = array.Length;
for (int i = 0; i < length-2; i++)
{
for (int j = 0; j < length-1; j--)
{
if (array[j] < array[j - 1])
{
T temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
当我们定义一个类,而这个类需要引用它本身以外的其他类型时,我们可以定义有参数的构造函数,然后将它需要的参数从构造函数传进来吗,但是在上面,我们的参数T本身就是一个类型(类似于int、byte、char,而不是我们类型的实例,比如‘1’和a)很显然我们无法在构造函数中传递这个T类型的数组,因为参数都是出现在实例的位置,而T是类型本身,它的位置不对,比如下面的通常的构造函数:
public SortHelper(类型 类型实例名称);
而我们期望的构造函数是:
public SortHelper(类型 );

 

 

那么上面这段话,我看的懵懵懂懂,什么叫很显然我们无法在构造函数中传递这个T类型的数组,因为参数都是出现在实例的位置,而T是类型本事,它的位置不对。

奇妙能力的主页 奇妙能力 | 菜鸟二级 | 园豆:253
提问于:2016-06-23 17:53
< >
分享
最佳答案
0

public Class SortHelper<T>

不就可以了么?难道我理解错你的问题了?

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-06-24 09:58

你把泛型理解为一个占位符,甚至你可以对这个占位符添加约束,让其符合一定要求,比如必须是class,或者必须实现某个接口啥的。

泛型可以在编译时保证代码的安全性,比如你的例子中对泛T实例的大小与比较在没有任何对T约束的情况下是无法编译通过的,因为你的T(可能你贴的代码不完整)可以是任何玩意。

Daniel Cai | 园豆:10424 (专家六级) | 2016-06-24 10:06
其他回答(1)
0

完全不知道你在说什么.我解释一下什么是泛型吧

1.泛型就是一个模版.意思是我将来会指定一个类.但我现在不知道这个类是什么.

2.虽然我现在不知道这个类是什么.但是我有一些操作并不需要知道这个类是什么.比如定义一个数组.从数组里去掉3个(例子)

吴瑞祥 | 园豆:29449 (高人七级) | 2016-06-23 20:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册