请解释此委托语法的一部分:&#34; <t>&#34; </t>

时间:2014-10-09 16:21:20

标签: c# generics delegates

几周前我问了一个相关问题,但没有解决这个具体问题。

在这个代表中:

public delegate T LoadObject<T>(SqlDataReader dataReader);

我理解第一个T是用户声明的返回对象,并且整个委托处理一个带有SqlDataReader的方法,但<T>是什么意思?

2 个答案:

答案 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;
    }
}