c# 语法问题

mwsz_666 2010-01-16 08:20:51
有句代码不明白:DataPortal.Fetch<AccessoriesLog>(str);

我明白的是:
DataPortal是一个类。
Fetch是一个静态函数。
AccessoriesLog也是一个类。
str是一个字符串参数。

我不明白的是Fetch后面的那两个尖括号是什么意思。

别告诉我那是泛型,我知道那是泛型,但我理解的泛型应该是和类一起使用的。比如说一个类是个泛型,类里面的一个属性是泛型,这些我都知道。我就是不明白为什么函数后面还能接泛型呢?请教大家了。

任何帮助都不胜感激。
...全文
305 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mwsz_666 2010-01-16
  • 打赏
  • 举报
回复
明白啦。
5喽的朋友说了半天我也没明白,12楼的朋友举了个例子我就明白啦。
killaxing 2010-01-16
  • 打赏
  • 举报
回复
12楼的列子很好 对我们初学者很好
UP UP
l171147904 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ouc_ajax 的回复:]
泛型的好处就在于,只要定义一个函数/类,就可以应多种类型的传递。
不然除非定义参数为Object类型。
以来要自己进行复杂的强制转化!而且不安全。
[/Quote]

主要,拆箱 和装箱 的 问题!

数据:引用类型,值类型

类型转换设计到一个 效率问题!
http://www.cnblogs.com/huashanlin/archive/2007/05/16/749359.html
xray2005 2010-01-16
  • 打赏
  • 举报
回复
泛型方法/泛型函数
有关泛型,多看基础知识
江南小鱼 2010-01-16
  • 打赏
  • 举报
回复
有关泛型,多看基础知识。以下举个小例子说明泛型的强大之处。


/// <summary>
/// 互换两个int大小
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
static void SwapInt(ref int a, ref int b)
{
int tmp = a;
a = b;
b = tmp;
Console.WriteLine("a:{0} b:{1}", a, b);
}
/// <summary>
/// 互换两个float的大小
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
static void SwapFloat(ref float a, ref float b)
{
float tmp = a;
a = b;
b = tmp;
Console.WriteLine("a:{0} b:{1}", a, b);
}
/// <summary>
///互换两个Decimal大大小
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
static void SwapDecimal(ref decimal a,ref decimal b)
{
decimal tmp = a;
a = b;
b = tmp;
Console.WriteLine("a:{0} b:{1}", a, b);
}

使用泛型

/// <summary>
/// 泛型互换方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="a"></param>
/// <param name="b"></param>
static void Swap<T>(ref T a,ref T b)
{
T tmp = a;
a = b;
b = tmp;
Console.WriteLine("a:{0} b:{1}", a, b);
}

使用泛型后,在调用时可以非常灵活,交换任意类型的两个变量。
当然还可以更强大以下
比如这样定义
 static void Swap<T,S>(ref T a,ref S b)
maomao90 2010-01-16
  • 打赏
  • 举报
回复
支持五楼
ouc_ajax 2010-01-16
  • 打赏
  • 举报
回复
泛型的好处就在于,只要定义一个函数/类,就可以应多种类型的传递。
不然除非定义参数为Object类型。
以来要自己进行复杂的强制转化!而且不安全。
ProjectDD 2010-01-16
  • 打赏
  • 举报
回复
我想可能是这样的,泛型主要用于同一个基类的一系列类型 加上泛型以后 可以把处理变为
强类型,以提高 效率,这大概是引入泛型的初衷之一

比如 void M(object o); VS void M<T>(T t); 在效率上的差别

当然在为泛型方法写算法时,会面临一些问题,很多时候它需要依赖于 对泛型参数的约束,来获得支持

void M<T>(T t){}这样的方法 t中的成员和object相一至,难于 展开基于泛型参数支持的 算法
所以可能需要加入 类型约束以获得必要的支持,象这样

void M<T>(T t)where T:Control{},

另外 泛型参数可用 结构类型,采用 where T:struct来 约束
zheng2852848 2010-01-16
  • 打赏
  • 举报
回复
五楼正解
mwsz_666 2010-01-16
  • 打赏
  • 举报
回复
我就不明白,函数后面写一个泛型和不写泛型的其别是什么呢?我要不写不也用的好好的吗?为什么还要写呢?

在什么情况下能用到泛型函数,使用泛型函数能给我带来哪些好处.
ProjectDD 2010-01-16
  • 打赏
  • 举报
回复
这就是泛型,你说的你理解的是 类泛型参数,比如这样

class A<T> where T:new(){
T Tp{get;set;}
}

另外方法也可以定义泛型象这样

void M<T>(T t)where T:struct{}

值得注意的是在调用泛型方法时,你可以选择 推断,也可以指明泛型的类型参数
例:

this.M<int>(33); //this.M(33);

this.M<float>(33.01f); //this.M(33.01f);

...
你这个例子就属于在调用 泛型方法时 指明方法的泛型类型的情况
dogfish001 2010-01-16
  • 打赏
  • 举报
回复
up
期待答案
jieon 2010-01-16
  • 打赏
  • 举报
回复
up
Jack2013tong 2010-01-16
  • 打赏
  • 举报
回复
UP,期待答案
  • 打赏
  • 举报
回复
泛型方法/泛型函数

111,123

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧