在这个代表中:
public delegate T LoadObject<T>(SqlDataReader dataReader);
我理解第一个T是用户声明的返回对象,并且整个委托处理一个带有SqlDataReader的方法,但<T>
是什么意思?
答案 0 :(得分:0)
如果您熟悉Dot Net Generics,那么使用泛型代理不应成为问题。 正如@pwas所述,请参阅MSDN通用文档here。
为了清除您的疑问,您可以仅使用与初始化委托引用具有相同类型的方法绑定您的委托:
实施例 -
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;
}
答案 1 :(得分:0)
在C#中,我们有泛型类,泛型方法和泛型委托,泛型接口和泛型Structs。考虑以下示例:
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;
}
}