- 浏览: 82020 次
- 性别:
- 来自: dg
文章分类
- 全部博客 (70)
- [随笔分类]DB(数据库) (18)
- c# (1)
- 实用参考代码 (1)
- 默认收藏夹 (9)
- [网站分类]6.读书区(技术书籍阅读心得、书籍推荐) (1)
- xml&web服务 (1)
- [随笔分类]Asp.net (18)
- C# BLOG (1)
- 技术仓库 (0)
- .net (1)
- 编程技巧 (1)
- [随笔分类].Net Framework (1)
- [随笔分类]程序人生(非技术) (1)
- [随笔分类]其他技术类 (1)
- [随笔分类]WAP (1)
- 收藏夹 (1)
- 其他 (1)
- DotNet技术 (4)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (4)
- [网站分类]7.提问区(建议在<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>中提问) (2)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (1)
- [随笔分类]Javascript & Css & Html (1)
最新评论
Type是System.Reflection功能的根 (Root),也是存取Metadata的主要方法.
使用Type的成員可以取得相關資訊,例如建構函式(Constructor),方法,字段,屬性和類別的事件,以及模組和部署類別的組件(Assembly).
3種取得Type的方法:
1.靜態方法
Type.GetType()
2.運算符
typeof()
3.實例的方法GetType
Employee e=new Employee();
e.GetType()
在一般情況下我們调用的方法並传递给它们的参数,某些情况下可能希望根据用户操作动态调用方法.
通过Reflection命名空间
方法1是使用Type对象上的InvokeMember方法
方法2是使用MethodInfo对象上的Invoke方法
example:
先定義類Employee
其中有靜態屬性Data
實例屬性Name,ID
2個索引器
/// 自定義類
/// </summary>
public class Employee
{
string name;
int id;
ArrayList list;
static int data;
//instance .ctor()
public Employee( int id, String name )
{
this.name = name;
this.id = id;
list=new ArrayList();
this.list.Add( "001" );
this.list.Add( "002" );
}
//static .ctor()
static Employee()
{
data=119;
}
public override string ToString ()
{
return "Id="+ id.ToString() + ", Name=" + name;
}
//instance Method "add"
public string add( string key1,string key2 )
{
string result=key1+key2;
return result;
}
//static Method "add"
public static string add( string key1,string key2,string key3 )
{
return key1+key2+key3;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int ID
{
get
{
return id;
}
set
{
id = value;
}
}
public static int Data
{
get
{
return data;
}
set
{
data=value;
}
}
/// <summary>
/// by index
/// </summary>
public string this [ int index ]
{
get
{
return list[index].ToString();
}
set
{
list[index]=value;
}
}
/// <summary>
/// by value
/// </summary>
public string this [ string values]
{
set
{
this[list.IndexOf(values)]=value;
}
}
}
動態調用:
定義變量
int i;
Type t=typeof( Employee );
Employee e=new Employee(1000,"no 1000");
方法1是使用Type对象上的InvokeMember方法:
先動態調用類Employee的實例方法ToString
InvokeMember方法的第一個參數是要調用的方法名稱
第2個參數是位枚舉,代表搜尋的方式
第四個參數是要調用的對象,要是靜態的就用null
第五個參數是要傳送給ToString的數值,由於ToString方法是無參方法,這裡我們送一個空數組new object[]{}
2 result=(typeof(Employee).InvokeMember("ToString",
3 BindingFlags.InvokeMethod,
4 null,
5 e,
6 new object[]{})).ToString();
7 Console.WriteLine("instance Method 'ToString' result={0}", result );
8
再動態調用類Employee的實例方法add,靜態方法add
注意InvokeMember方法的第5個參數代表的是要傳送給add方法的數值
第8個參數代表的是add方法的參數名稱
result=typeof(Employee).InvokeMember("add",
BindingFlags.InvokeMethod,
null,
e,
new object[]{"o1","o2"},
null,
null,
new string[]{"key1","key2"}).ToString();
Console.WriteLine("instance Method 'add' result={0}", result );
//call static Method "add"
result=typeof(Employee).InvokeMember("add",
BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public ,
null,
null,
new object[]{"o1","o2","o3"},
null,
null,
new string[]{"key1","key2","key3"}).ToString();
Console.WriteLine("static Method 'add' result={0}",result );
Console.WriteLine();
再修改靜態屬性Data,把它從119修改為911
2 i=(int)typeof(Employee).InvokeMember("Data",
3 BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Static,
4 null,
5 null,
6 new object[]{});
7 Console.WriteLine("static Property 'Data'={0}", i );
8
9 //update static Property
10 typeof(Employee).InvokeMember("data",
11 BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static,
12 null,
13 null,
14 new object[]{911});
15 Console.WriteLine("update static Property ");
16
17 //call static Property
18 i=(int)typeof(Employee).InvokeMember("Data",
19 BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Static,
20 null,
21 null,
22 new object[]{});
23 Console.WriteLine( "again call static Property 'Data'={0}",i );
24 Console.WriteLine();
25
再修改實例屬性Name,把它從no 1000修改為w
2 result=typeof(Employee).InvokeMember("Name",
3 BindingFlags.GetProperty ,
4 null,
5 e,
6 new object[]{}).ToString();
7 Console.WriteLine( "instance Property 'Name'={0}", result );
8
9 //update instance property
10 typeof(Employee).InvokeMember("name",
11 BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance ,
12 null,
13 e,
14 new object[]{"w"});
15 Console.WriteLine("update instance property ");
16
17 //again call read instance Property
18 result=typeof(Employee).InvokeMember("Name",
19 BindingFlags.GetProperty ,
20 null,
21 e,
22 new object[]{}).ToString();
23 Console.WriteLine( "again call instance Property 'Name'={0}", result );
24 Console.WriteLine();
25
再修改索引器,把索引器的第2個(index[1])內容修改為222
注意修改索引器的InvokeMember方法,第5個參數的數組new object[]{"002","222"}
将要设置元素的索引值放在对象数组的第一个元素中,将要设置的值作为第二个元素
2 result=typeof(Employee).InvokeMember("Item",
3 BindingFlags.GetProperty,
4 null,
5 e,
6 new object[]{1}).ToString() ;
7 Console.WriteLine("index[1]={0}", result);
8
9 //update index[1]
10 typeof(Employee).InvokeMember("Item",
11 BindingFlags.SetProperty,
12 null,
13 e,
14 new object[]{"002","222"});
15 Console.WriteLine("update index[1] ");
16
17 //again call index[1]
18 result=typeof(Employee).InvokeMember("Item",
19 BindingFlags.GetProperty,
20 null,
21 e,
22 new object[]{1}).ToString() ;
23
24 Console.WriteLine("again call index[1]={0}", result);
25 Console.WriteLine();
26
調用構造器
InvokeMember方法的第1個參數為空字符""
2 Employee employee=(Employee)typeof(Employee).InvokeMember("",
3 BindingFlags.CreateInstance,
4 null,
5 null,
6
发表评论
-
DataReader类访问字段的值
2004-04-30 16:36 1030DataReader类访问字段的 ... -
MS SQL数据库备份和恢复存储过程
2004-05-10 15:48 1184今天闲散没有事情,就写拉数据库备份和恢复存储过程(和大家交流一 ... -
购物车中数据的存放方式
2004-06-30 15:25 1595第一次做BToC站点的购物车,总结了一下购物车中数据的存放方式 ... -
枚举转化和判断方法的总结
2005-01-10 11:19 1475定义枚举: public enum DisplayType { ... -
设计时颜色调配参考(小资料)
2005-02-23 10:03 791设计时颜色调配参考,通常在编程是要考虑页面的着色问题,在此提供 ... -
表中记录查询排序随笔(sql server中order by使用方式小总结)
2005-03-02 10:14 1185跟DB打交道,用得最多的是查询 既然查询就会有查询记录排序问题 ... -
sql server中扩展存储过程随笔(几个有用的PROCEDURE小总结)
2005-03-02 17:30 797在sql server中扩展存储过 ... -
临时表和游标的使用小总结
2005-04-25 15:22 873最近使用Db的机会比较多,现做了一些小总结: i。临时表 ...
相关推荐
技术指标MCAD是技术分析中常用的指标之一,它可以帮助投资者捕捉股票的涨跌趋势和买卖点。MCAD指标是基于MACD(Moving Average Convergence Divergence)指标,它通过计算股票的快慢均线的差异来预测股票的涨跌趋势...
MCAD系统数据结构部分详细描述了实体结点的构成,每个实体结点包含类型标识符(tag)、颜色(color)和线型(linestyle)三个属性,其中类型标识符用于区分不同类型的图形实体,颜色标识了实体的颜色,而线型描述了...
在电力电子领域,滞环电流控制是一种常见的控制策略,尤其适用于需要快速响应和良好动态性能的电力变换器和逆变器。滞环控制通过设定一个电流环宽,并与实际电流的滞环宽度进行比较,来控制开关器件的开闭,从而实现...
2. **C#语言特性**:C#是一种面向对象的语言,支持类、接口、继承、多态等特性。学习C#的关键概念如变量、数据类型、控制流语句、异常处理以及类和对象的创建与使用。 3. **Windows Forms开发**:MCAD MCSD认证会...
MCAD可快速绘制平面机构运动简图,并运动分析、仿真和设计.建一个模型仅需用几十秒到几分钟,比用商业CAD软件建模更简单、快捷,且可重复使用调整。可供从事机械的工程师、学生、教师使用.(若不是CSDN用户,请尽可能...
JT2Go软件使用方法培训课程之PMI使用方法 JT2Go软件是一款功能强大且用户友好的软件,主要用于查看、编辑和共享JT格式的三维模型数据。JT格式是一种开放的、公共的、可由大多数主流MCAD创建的中性3D数据格式,包含...
.NET 认证MCAD70-305实战百题详解 清华大学出版社 美国微软工程师张玉石编著。
R-207-2012技术报告是日本环境省国立环境研究所发布的一份重要文献,详细阐述了MCAD模型的理论基础、实现方法和应用案例。报告中包含了模型的详细说明、参数设定指南以及结果验证过程,为用户提供了全面的参考材料。...
《MCAD-MCSD Visual C# Certification all in one》是一个针对微软认证的综合学习资源,旨在帮助考生准备MCAD(Microsoft Certified Application Developer)和MCSD(Microsoft Certified Solution Developer)的...
通过采用新的标准、工具集成和增量设计变更的协同方法,可以提高设计效率,减少潜在问题,并促进创新产品的快速上市。这不仅涉及到技术工具的使用,更关乎设计流程的优化和团队合作的强化,以应对日益复杂的设计挑战...
MCAD MCSD CSharp Certification All in One Exam Guide MCAD MCSD CSharp Certification All in One Exam Guide MCAD MCSD CSharp Certification All in One Exam Guide
2. **深度集成**:集成的平台应该支持两种类型的CAD工具在同一环境中工作,无需额外的转换程序。 3. **版本管理**:有效管理不同设计版本,确保所有团队成员都在同一版本上工作,减少版本冲突。 4. **数据过滤和定制...
MCAD-MCSD Self-Paced Training Kit305&315 MCAD-MCSD Self-Paced Training Kit305&315 MCAD-MCSD Self-Paced Training Kit305&315 MCAD-MCSD Self-Paced Training Kit305&315
### 优化协同式 ECAD - MCAD PCB 制造流程 #### 一、背景与挑战 随着技术的快速发展,特别是5G技术的应用以及物联网(IoT)设备的普及,电子产品正朝着更加定制化和个性化的方向发展。这些趋势对PCB(Printed Circuit...
MCAD-MCSD Self-Paced Training Kit306&316 MCAD-MCSD Self-Paced Training Kit306&316 MCAD-MCSD Self-Paced Training Kit306&316
XML Web服务是互联网上应用程序之间通信的一种方式,它利用了标准的XML(可扩展标记语言)格式进行数据交换。在本教程中,我们将深入探讨如何使用Microsoft的开发工具Visual Basic .NET和Visual C#.NET来创建和使用...
在“Web21编程:Web类的MCAD编程”中,我们主要探讨的是现代Web开发技术,特别是针对JavaScript编程的应用。这个主题旨在帮助开发者掌握构建交互式、动态和响应式的Web应用程序所需的关键技能。让我们深入了解一下...
【标题】"pftw21:网络课程的Mcad Spring 21编程"涉及到的是一个网络课程项目,其中涵盖了Mcad(可能是Microcomputer Applications and Computer Design)春季21学期的编程教学内容。这个课程可能重点讲解了如何利用...
这通常涉及生成客户端代理类,这些类是由服务的WSDL描述自动生成的,使得开发者可以像调用本地方法一样调用远程Web服务。课程中可能包括实际的代码示例,演示如何在不同编程环境中(如Visual Studio或Eclipse)实现...
Visual Basic® .NET and Microsoft Visual C#® .NET MCAD/MCSD Self-Paced Training Kit: Developing Windows®-Based Applications with Microsoft® Visual Basic® .NET and Microsoft Visual C#® .NET, ...