请解释此委托语法的部分:<;T>&”;
本文关键字:lt gt 解释 语法 | 更新日期: 2023-09-27 18:26:02
几周前我问了一个相关的问题,但这个特定的细节没有得到解决。
在此代表中:
public delegate T LoadObject<T>(SqlDataReader dataReader);
我知道第一个T是用户声明的返回对象,整个委托处理一个使用SqlDataReader的方法,但<T>
是什么意思?
如果您熟悉Dot-Net泛型,那么使用泛型委托应该不是问题。正如@pwas所提到的,请参阅这里的MSDN通用文档。
为了消除您的疑虑,您可以仅将您的委托与那些与初始化的委托引用具有相同类型的方法绑定:
示例-
public delegate T LoadObject<T>(SqlDataReader dataReader);
static void Main(string[] args)
{
LoadObject<int> del = Test1; //Valid
LoadObject<string> del1 = Test1; //Compile Error
}
public static int Test1(SqlDataReader reader)
{
return 1;
}
在C#中,我们有泛型类、泛型方法、泛型委托、泛型接口和泛型结构。考虑下面的例子:
public delegate T MaxDelegate<T>(T a, T b);
void Main()
{
Console.WriteLine( MaxClass<int>.whatIsTheMax(2,3) );
// Just as a class when using a generic method,You must tell the compiler
// the type parameter
Console.WriteLine( MaxMethod<int>(2,3) );
// Now the max delegate of type MaxDelegate will only accept a method that has
// int someMethod(int a, int b) .It has the benefit of compile time check
MaxDelegate<int> m = MaxMethod<int>;
// MaxDelegate<int> m2 = MaxMethod<float>; // compile time check and error
m(2,3);
//m(2.0,3.0); //compile time check and error
}
public static T MaxMethod<T>(T a, T b) where T : IComparable<T>
{
T retval = a;
if(a.CompareTo(b) < 0)
retval = b;
return retval;
}
public class MaxClass<T> where T : IComparable<T>
{
public static T whatIsTheMax(T a, T b)
{
T retval = a;
if ( a.CompareTo(b) < 0)
retval = b;
return retval;
}
}