为什么通用委托有DelegateName <T>(T arg)?为什么不使用DelegateName(T arg)

hel*_*rld 0 c# generics delegates

为什么通用代表有DelegateName<T>?为什么不DelegateName(T arg)

参数已经指定了类型,那么为什么必须跟随委托名称<T>,它是作为命名约定,还是开发人员知道它接受整数或这种C#语法的目的是什么?

public delegate void MyGenericDelegate<T>(T arg);

Main()
{
    // Register targets.      
    MyGenericDelegate<string> strTarget = new MyGenericDelegate<string>(StringTarget);      
    strTarget("Some string data");  

    MyGenericDelegate<int> intTarget =  new MyGenericDelegate<int>(IntTarget);      
    intTarget(9);  

    static void StringTarget(string arg) 
    {      
        Console.WriteLine("arg in uppercase is: {0}", arg.ToUpper());  
    }  

    static void IntTarget(int arg)   
    {       
        Console.WriteLine("++arg is: {0}", ++arg); 
    }    
}
Run Code Online (Sandbox Code Playgroud)

Asa*_*din 7

为了声明您正在使用的类型参数的存在作为参数的类型arg,您需要使您的方法通用.使其通用需要使用以下语法:

public delegate void MyGenericDelegate<T>(T arg);
Run Code Online (Sandbox Code Playgroud)

想一想:如果你要使用它:

public delegate void MyGenericDelegate(T arg);
Run Code Online (Sandbox Code Playgroud)

这声明了一个委托类型,它字面上接受一个类型的参数T.编译器将查看当前命名空间和导入的命名空间并尝试查找类型T,如果找不到,则会出现编译器错误.