| C#反射实例讲解
|
|
1 创建用于反射使用的DLL 新建一个C#类库项目,拷贝源代码如下,编译生成DLL(假如DLL的文件名是TestReflect.dll) |
1
using
System;
2
3
namespace
Webtest
4
{
5
///
<summary>
6
///
ReflectTest 的摘要说明。
7
///
</summary>
8
public
class
ReflectTest
9
{
10
public
ReflectTest()
11
{}
12
13
public
string
WriteString(
string
s)
14
{
15
return
"
欢迎您,
"
+
s;
16
}
17
18
///
<summary>
19
///
dsajkjflasjdfalksdjfaskfd
20
///
</summary>
21
///
<param name="s"></param>
22
///
<returns></returns>
23
public
static
string
WriteName(
string
s)
24
{
25
return
"
欢迎您光临,
"
+
s;
26
}
27
28
public
string
WriteNoPara()
29
{
30
return
"
您使用的是无参数方法
"
;
31
}
32
}
33
}
34
35
36
using
System;2
3
namespace
Webtest4
{5
///
<summary>
6
///
ReflectTest 的摘要说明。7
///
</summary>
8
public
class
ReflectTest9
{10
public
ReflectTest()11
{}
12
13
public
string
WriteString(
string
s)14
{15
return
"
欢迎您,
"
+
s;16
}
17
18
///
<summary>
19
///
dsajkjflasjdfalksdjfaskfd20
///
</summary>
21
///
<param name="s"></param>
22
///
<returns></returns>
23
public
static
string
WriteName(
string
s)24
{25
return
"
欢迎您光临,
"
+
s;26
}
27
28
public
string
WriteNoPara()29
{30
return
"
您使用的是无参数方法
"
;31
}
32
}
33
}
34
35
36
2 应用于反射的例子
在ASPNET页面中加入以下函数:
1
public
void
test1()
2
{
3
System.Reflection.Assembly ass;
4
Type type ;
5
object
obj;
6
try
7
{
8
ass
=
System.Reflection.Assembly.LoadFile(
@"
d:/TestReflect.dll
"
);
9
type
=
ass.GetType(
"
Webtest.ReflectTest
"
);
//
必须使用名称空间+类名称
10
System.Reflection.MethodInfo method
=
type.GetMethod(
"
WriteString
"
);
//
方法的名称
11
obj
=
ass.CreateInstance(
"
Webtest.ReflectTest
"
);
//
必须使用名称空间+类名称
12
string
s
=
(
string
)method.Invoke(obj,
new
string
[]
{
"
jianglijun
"
}
);
//
实例方法的调用
13
14
Response.Write(s
+
"
<br>
"
);
15
method
=
type.GetMethod(
"
WriteName
"
);
//
方法的名称
16
s
=
(
string
)method.Invoke(
null
,
new
string
[]
{
"
jianglijun
"
}
);
//
静态方法的调用
17
Response.Write(s
+
"
<br>
"
);
18
19
method
=
type.GetMethod(
"
WriteNoPara
"
);
//
无参数的实例方法
20
s
=
(
string
)method.Invoke(obj,
null
);
21
Response.Write(s
+
"
<br>
"
);
22
method
=
null
;
23
}
24
catch
(Exception ex)
25
{
26
Response.Write(ex
+
"
<br>
"
);
27
}
28
finally
29
{
30
ass
=
null
;
31
type
=
null
;
32
obj
=
null
;
33
}
34
}
35
public
void
test1()2
{3
System.Reflection.Assembly ass;4
Type type ;5
object
obj;6
try
7
{8
ass
=
System.Reflection.Assembly.LoadFile(
@"
d:/TestReflect.dll
"
);9
type
=
ass.GetType(
"
Webtest.ReflectTest
"
);
//
必须使用名称空间+类名称
10
System.Reflection.MethodInfo method
=
type.GetMethod(
"
WriteString
"
);
//
方法的名称
11
obj
=
ass.CreateInstance(
"
Webtest.ReflectTest
"
);
//
必须使用名称空间+类名称
12
string
s
=
(
string
)method.Invoke(obj,
new
string
[]
{
"
jianglijun
"
}
);
//
实例方法的调用
13
14
Response.Write(s
+
"
<br>
"
);15
method
=
type.GetMethod(
"
WriteName
"
);
//
方法的名称
16
s
=
(
string
)method.Invoke(
null
,
new
string
[]
{
"
jianglijun
"
}
);
//
静态方法的调用
17
Response.Write(s
+
"
<br>
"
);18
19
method
=
type.GetMethod(
"
WriteNoPara
"
);
//
无参数的实例方法
20
s
=
(
string
)method.Invoke(obj,
null
);21
Response.Write(s
+
"
<br>
"
);22
method
=
null
;23
}
24
catch
(Exception ex)25
{26
Response.Write(ex
+
"
<br>
"
);27
}
28
finally
29
{30
ass
=
null
;31
type
=
null
;32
obj
=
null
;33
}
34
}
35
906

被折叠的 条评论
为什么被折叠?



