RIMBAUD,20岁后失业,................................
Asp.Net,MONO
博客园
首页
新随笔
联系
订阅
管理
22 Posts :: 5 Stories :: 41 Comments :: 5 Trackbacks
公告
昵称:
瓶子
园龄:
7年9个月
粉丝:
1
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
Crystal.SQL(2)
MONO(1)
Office and C#(3)
Web Any(1)
随笔档案
2006年7月 (3)
2006年6月 (2)
2006年5月 (2)
2006年4月 (3)
2006年3月 (1)
2004年10月 (1)
2004年8月 (3)
2004年6月 (5)
2004年5月 (5)
文章分类
技术
日记(1)
相册
2006年春节
Google logo
班级相册
我的工作桌
照片
<font size=2 >Private Links</font>
Robert Green's VB Blog
透明思考
小气的神
<font size=2 >常去逛的地方</font>
china/msdn
CODEPROJECT
CSDN
Enjoy Code
ittoolbox
晓东家园
<font size=2 >技术网站</font>
.net开发AutoCAD程序
aspnet
aspxcn
dev-club
gotdotnet
kbalertz
MSND
regexplib
SourceForge
VB.NET BLOG
Winforms.net
微软博客
最新评论
阅读排行榜
评论排行榜
推荐排行榜
范型与反射乱画。
Code
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
5
namespace
ConsoleApplication1
6
{
7
/**/
///
<summary>
8
///
Refere ninputer's blog
9
///
</summary>
10
class
Class2
11
{
12
private
class
myType
<
t
>
{ }
13
delegate
void
DelegateType();
14
15
16
17
18
static
void
Main()
19
{
20
/**/
/*
21
* 获得一个封闭构造类型(closed constructed type)的Type对象?
22
* 假设有类型: private class myType<t> { }
23
*/
24
Console.WriteLine(
typeof
(myType
<>
).ToString());
25
/**/
/*
26
* 如何从构造类型的Type对象生成泛型类型的Type对象?
27
* Type类的新增方法GetGenericTypeDefinition可以做到。
28
*/
29
DelegateType delegateInstance
=
delegate
()
30
{
31
Type cy
=
typeof
(List
<
int
>
);
32
Type gy
=
cy.GetGenericTypeDefinition();
33
Console.WriteLine(gy.ToString());
34
}
;
35
36
/**/
/*
如何获取类型参数的Type对象?
37
*泛型类型的T, U等类型参数,以及运行中的实际取值,都是可以从Type对象获取的
38
*/
39
delegateInstance
+=
delegate
()
40
{
41
Type cy
=
typeof
(List
<
int
>
);
42
Type[] gy
=
cy.GetGenericArguments();
43
for
(
int
i
=
0
; i
<
gy.Length; i
++
)
44
{
45
Console.WriteLine(gy[i].ToString());
46
}
47
}
;
48
/**/
/*
从泛型类型Type对象生成构造类型的Type对象。
49
*通常可以用来从一种构造类型生成另一种构造类型
50
*/
51
delegateInstance
+=
delegate
()
52
{
53
Type cy
=
typeof
(List
<
int
>
);
54
Type gy
=
cy.GetGenericTypeDefinition();
55
56
Type ny
=
gy.MakeGenericType(
typeof
(
string
));
57
Console.WriteLine(ny.ToString());
58
}
;
59
/**/
/*
60
* 如何取一个开放构造类型(open constructed type)的Type对象?
61
* 开放构造类型是最难处理的一个,因为他们的类型参数已经指定,但没有指定为具体类型,
62
* 而是指定为其他泛型类型的类型参数。这种类型在进行反射重载选取以及反射发出(Reflection Emit)
63
* 操作的时候尤为重要。我们的手法就是,先从宿主泛型类型的定义中获取类型参数的类型,然后再建造出开
64
* 放构造类型。这里,我们获得List<T>的构造函数的参数,IEnumerable<T>的类型,注意这里的T是List<T>所定义的,
65
* 而不是泛型IEnumerable<T>自己的类型参数
66
*/
67
delegateInstance
+=
delegate
()
68
{
69
Type cy
=
typeof
(List
<>
);
70
Type typeParm1
=
cy.GetGenericArguments()[
0
];
71
Type tienum
=
typeof
(IEnumerable
<>
);
72
73
74
Type tienumOpen
=
tienum.MakeGenericType(typeParm1);
75
76
//
只有用这种方法获得开放构造类型
77
//
你才能用这个语法获得真正想要的构造函数定义
78
//
因为构造函数定义里IEnumerable(Of T)是一个开放构造类型
79
System.Reflection.ConstructorInfo c
=
cy.GetConstructor(
new
Type[]
{tienumOpen}
);
80
Console.WriteLine(c.ToString());
81
82
}
;
83
84
85
delegateInstance.Invoke();
86
Console.Read();
87
}
88
89
}
90
}
91
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2006-06-16 22:24
瓶子
阅读(107)
评论(0)
编辑
收藏
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
iPhone 5四大猜想:泪珠状 带LED苹果标识
·
当当网Q4整体亏损1.3亿元 上年同期净利润1480万元
·
把孩子培养成为合格Geek的七个方法
·
担心网购的衣服不合身? 创业公司Clothes Horse用“问答”就能解决你的难题
·
评价社交媒体活动ROI的三个精确指标
»
更多新闻...
最新知识库文章
:
·
编程的艺术:漂亮的代码和漂亮的软件
·
GIT分支管理是一门艺术
·
编程:是一门艺术
·
编程是一门艺术吗?
·
对Java初学者的忠告
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
Powered by:
博客园
Copyright © 瓶子