首页 新闻 会员 周边 捐助

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下

0
悬赏园豆:5 [已解决问题] 解决于 2016-01-28 13:03

大家知道泛型委托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的类型是在哪里定义的呢?大家来帮助回答下



Lasthelloworld的主页 Lasthelloworld | 初学一级 | 园豆:92
提问于:2016-01-27 21:43
< >
分享
最佳答案
0

T1 T2当然是泛型了...你的hello和world也是泛型.下面的public Add<int, int> Adddemo才是指定了泛型参数.

泛型只是一个模版.没有实现时是无意义的.实现时必须要指定泛型参数.

买本C#或者C++教科书吧.里面都会讲的.

不看教科书的话.会有很多这种低级问题.简单来说就是"基础太差"

收获园豆:3
吴瑞祥 | 高人七级 |园豆:29449 | 2016-01-28 09:45

Visual C#.NET程序设计教程(21世纪高等学校计算机规划教材)

看完之后就不会有语法问题了.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-01-28 09:48

以前以为T是泛型的关键字,现在明白了,

我一般看书是遇到问题就看那个部分的,系统的去看不像上学的时候了,有那么多时间,感谢你的回答

下次问问题的时候,可以先查阅下,看能否解决。

Lasthelloworld | 园豆:92 (初学一级) | 2016-01-28 10:09
其他回答(2)
0

从IL层面去看

jello chen | 园豆:7336 (大侠五级) | 2016-01-27 21:51

IL层是最近才公布出来的吧~

支持(0) 反对(0) Lasthelloworld | 园豆:92 (初学一级) | 2016-01-28 10:10
0

Action<T1, T2>这里你可以理解为用T1, T2占位,之后你定义Action<int, int> AddAction变量时,就会将int, int替换T1, T2,就是List<>一样,系统定义一个List<T>,类型用T占位,你用的时候就可以用各种类型如List<int>、List<string>

收获园豆:2
飞翔の金雕 | 园豆:364 (菜鸟二级) | 2016-01-28 13:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册