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)
为了声明您正在使用的类型参数的存在作为参数的类型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,如果找不到,则会出现编译器错误.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |