大家知道泛型委托Action,是定义一个没有返回值的委托。
例如:
public Action<int, int> AddAction = (x, y) => { Console.WriteLine(x+y); };
可以在Action上F12进入可以看到源码为:
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
这里发现一个问题,T1,T2是什么类型呢,在哪里定义的,我按F12并没有找到对应的类型。
之后我试着定义一个类似Action的泛型委托。
public delegate int Add<Hello, World> (Hello x, World y);
然后我定义一个Add<Hello,World>的泛型委托变量
public Add<int, int> Adddemo= (x, y) => { return x + y; };
居然不报错,且能调用。
这里问题来了,我输入的Hello,World的类型是在哪里定义的呢?大家来帮助回答下
T1 T2当然是泛型了...你的hello和world也是泛型.下面的public Add<int, int> Adddemo才是指定了泛型参数.
泛型只是一个模版.没有实现时是无意义的.实现时必须要指定泛型参数.
买本C#或者C++教科书吧.里面都会讲的.
不看教科书的话.会有很多这种低级问题.简单来说就是"基础太差"
Visual C#.NET程序设计教程(21世纪高等学校计算机规划教材)
看完之后就不会有语法问题了.
以前以为T是泛型的关键字,现在明白了,
我一般看书是遇到问题就看那个部分的,系统的去看不像上学的时候了,有那么多时间,感谢你的回答
下次问问题的时候,可以先查阅下,看能否解决。
从IL层面去看
IL层是最近才公布出来的吧~
Action<T1, T2>这里你可以理解为用T1, T2占位,之后你定义Action<int, int> AddAction变量时,就会将int, int替换T1, T2,就是List<>一样,系统定义一个List<T>,类型用T占位,你用的时候就可以用各种类型如List<int>、List<string>