摘要: 前一章着重介绍了ILGenerator,今天我们就要学习msil指令了,在我们动态创建方法里有一个类里属性都是包含着MSIL指令集,所以了我们只需要掌握了该类的这些字段也就可以使用任何托管的语言进行动态的使用MSIL指令集了。这个类就是System.Reflection.Emit.OpCodes类。该类的MSDN上的介绍是通过 ILGenerator 类成员(例如 Emit)为发出提供 Micro... 阅读全文
posted @ 2010-09-14 18:03 英雄不问出处 阅读(303) 评论(0) 推荐(0)
摘要: 之前讲过关于如何动态创建和使用程序集、类、方法、字段、属性等两篇文章,第一篇主要讲了介绍动态创建类型的一些基本知识和如何创建程序集、类等,第二篇主要介绍的是如何使用动态创建的程序集,调用动态创建类的方法等的一个完整DEMO。今天讲的其实也是关于在动态创建类型里,如何动态的创建一个较复杂的方法,当然今天这一篇主要着重以介绍如何ILGenerator和一些概念,下一篇就来介绍MSIL指令集。 何为M... 阅读全文
posted @ 2010-09-14 18:01 英雄不问出处 阅读(459) 评论(0) 推荐(0)
摘要: 上一节讲了如何动态的创建,这一节就要讲创建了我们需要如何使用了,这当然也是非常重要的, 是吧。创建了动态类型但是又不使用,那创建它有什么用了。呵呵,今天我们就来一起学习动态使用动态创建的类型。 当然我们跟上一章一样要对这些动态类型的使用类型进行一些了解。类:使用System.Type(任何时候都是反射出类型进行使用,难道不是吗?)构造函数:System.Reflection.Constructor... 阅读全文
posted @ 2010-09-14 18:00 英雄不问出处 阅读(391) 评论(0) 推荐(0)
摘要: 有时候在整个项目架构里也需要动态创建程序集的需求,那如何创建程序集呢,请跟我来学习一下吧。   首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动态创建也一样使用的是反射,是属于反射的技术!也就是将对象或者数据映射成一个对象或者程序集保存起来而已。  首先我们需要了解每个动态类型在.net中都是用什么类型来表示的。程序集:System.Re... 阅读全文
posted @ 2010-09-14 17:59 英雄不问出处 阅读(376) 评论(0) 推荐(0)
摘要: 在C#中,我们要使用反射,主要有三个方面:第一,反射程序集,模块,类的成员以及成员的一些信息;第二,接下来就是动态调用类的成员方法;第三个方面就动态产生程序集,模块和类以及类的成员。我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:System.Reflection命名空间AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器Assembly:程序集类Module:模块类Type... 阅读全文
posted @ 2010-09-14 17:57 英雄不问出处 阅读(164) 评论(0) 推荐(0)
摘要: 一、解决方案、项目、程序集、命名空间初学者很容易把这些概念搞混淆。先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件。在.Net下,一个项目可以表现为多种类型,如控制台应用程序,Windows应用程序,类库(Class Library),Web应用程序,Web Service,Windows控件等等。如果经过编译,从扩展名来看,应用程序都会被编译为.exe文件,而其余的会被编... 阅读全文
posted @ 2010-09-14 17:50 英雄不问出处 阅读(219) 评论(0) 推荐(0)
摘要: 迭代器概述迭代器是可以返回相同类型的值的有序序列的一段代码。迭代器可用作方法、运算符或 get 访问器的代码体。迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。有关更多信息,请参见 yield。可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(in... 阅读全文
posted @ 2010-09-14 17:42 英雄不问出处 阅读(249) 评论(0) 推荐(0)
摘要: ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和... 阅读全文
posted @ 2010-09-14 17:38 英雄不问出处 阅读(178) 评论(0) 推荐(0)
摘要: 今天给一个同事讲一个程序,应该是一个比较基础的程序,但是把我给难住了(哎,才发现自己的基础也滥的可以了),程序大概是这样的: public class MyStringArray : IEnumerable { public IEnumerator GetEnumerator() { return (IEnumerator)new MyStringArrayEnumerator(this); } ... 阅读全文
posted @ 2010-09-14 17:32 英雄不问出处 阅读(185) 评论(0) 推荐(0)
摘要: 1.System.Colloctions中表示集合的行为的接口有:1)ICollection定义所有集合的大小、枚举数和同步方法。派生于IEnumerable它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口)但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义2)IEnumerable公开枚举数,该枚举数支持在集合上进行简单迭代它只有一个方法 GetEnumer... 阅读全文
posted @ 2010-09-14 17:28 英雄不问出处 阅读(337) 评论(0) 推荐(0)
摘要: 本章导读System.Collections.Generic和System.Collections集合的结构有很多相似之处,不同的是“Generic”提供的都是泛型集合,而“Collections”中的集合并不都支持泛型。System.Collections.Generic是在C# 2.0中新加的命名空间,主要用来创建强类型集合,以提高类型安全和操作... 阅读全文
posted @ 2010-09-14 17:27 英雄不问出处 阅读(2108) 评论(0) 推荐(0)
摘要: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。System.Collections.Specialized 命名空间包含专用的和强类型的集合,例... 阅读全文
posted @ 2010-09-14 17:22 英雄不问出处 阅读(206) 评论(0) 推荐(0)
摘要: 1)IEnumerable:IEnumerable是公开枚举数,该枚举数支持在集合上进行简单迭代。必须对它进行实现才能支持ForEach语义。2)ICollection:派生自IEnumerable接口,定义所有集合的大小、枚举数和同步方法。3)IList:派生自ICollection。IList实现是可被排序且可按照索引访问其成员的值的集合,如ArrayList类。4)IDictionary:和... 阅读全文
posted @ 2010-09-14 17:16 英雄不问出处 阅读(162) 评论(0) 推荐(0)
摘要: 对于.NET Framework提供的“标准”的集合类型可以直接使用foreach,如(Array、ArrayList、HashTable),除此之外,对于自定义的集合对象,也可以使其支持foreach的使用,只要实现IEnumerable接口即可(刚提到的几种集合类型都实现了这个接口)。先看个例子:publicclassHelloCollection:IEnumerabl... 阅读全文
posted @ 2010-09-14 17:11 英雄不问出处 阅读(378) 评论(0) 推荐(0)
摘要: 一直以来,搞不懂IEnumerable与IEnumerator这两个接口的区别,今天看了一下MSDN并在网上搜了一把关于他们的区别,似乎理解了,但还是弄不懂他们最主要的区别是什么。看看MSDN是怎么定义他们的吧。再贴一个MSDN给出的例子:IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识:1... 阅读全文
posted @ 2010-09-14 17:09 英雄不问出处 阅读(252) 评论(0) 推荐(0)
摘要: IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型。IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历。IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型。IEnumerable<T>:继承自IEnu... 阅读全文
posted @ 2010-09-14 17:07 英雄不问出处 阅读(1022) 评论(0) 推荐(0)
摘要: 面向对象的三个基本特征是:封装、继承、多态。 封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况... 阅读全文
posted @ 2010-09-14 17:00 英雄不问出处 阅读(717) 评论(0) 推荐(0)
摘要: 自从使用.net以来就一直都在使用string.Format方法,一直没有空或者其他原因都没有深入去了解,主要还是因为项目上似乎没有这么高的要求,也没必要去深入了解,就算碰到了自定义的格式化内容也是写几个通用的方法而已。今天空下来仔细去理解了一下,在这里和大家分享一下,也希望大家一起交流。 string.Format方法是string类提供的静态方法,一般最多使用的是其两个参数的重载,例如:[代码... 阅读全文
posted @ 2010-09-14 16:55 英雄不问出处 阅读(288) 评论(0) 推荐(0)
摘要: basebase 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基类构造函数。 基类访问只能在构造函数、实例方法或实例属性访问器中进行。 示例:在派生类中调用基类方法。 //base关键字//访问基类成员usingSystem;publicclassBaseClass{protectedstring_className="BaseClass"... 阅读全文
posted @ 2010-09-14 16:48 英雄不问出处 阅读(242) 评论(0) 推荐(0)
摘要: 静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。 静态类 类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework... 阅读全文
posted @ 2010-09-14 16:46 英雄不问出处 阅读(253) 评论(0) 推荐(0)
摘要: 静态类静态类必须直接从基类System.Object派生,这是因为从其他基类型派生的类由于继承性仅适用于对象的缘故而没有任何意义,而且不能创建静态类的实例。 静态类不能实现任何接口,这是因为只有使用类的实例时才去调用类的接口。 静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都将导致编译器产生错误。 静态类不能用作字段、方法、参数或者局部变量,这是因为这些用法都将导致编译器... 阅读全文
posted @ 2010-09-14 16:40 英雄不问出处 阅读(210) 评论(0) 推荐(0)
摘要: DateTime结构 表示时间上的一刻,通常以日期和当天的时间表示。 它有很多比较重要的方法和属性这里我就的列举了。 它不能直接被赋值成 null, 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00, C#中DateTime的空值是最小值0001-01-01 00:00:00, 我建议是赋值成以下的方法 DateTime s = def... 阅读全文
posted @ 2010-09-14 16:30 英雄不问出处 阅读(244) 评论(0) 推荐(0)
摘要: GC类 它可以通过编程使用一个静态的成员集合与垃圾回收器进行交互。 一般只有使用那托管代码是才需要用到System.GC类 垃圾回收由以下步骤组成: 1. 垃圾回收器搜索托管代码中引用的托管对象。 2. 垃圾回收器尝试完成没有被引用的对象。 3. 垃圾回收器释放没有被引用的对象并回收它们的内存。Guid类 表示全局唯一标识符 (GUID)。 这个类园子里讨论比较火热。 大家可以看看以下面几篇文章... 阅读全文
posted @ 2010-09-14 16:29 英雄不问出处 阅读(196) 评论(0) 推荐(0)
摘要: 类库是我们学习和开发的基本。 因为本人列举了一些常用的类,得到了很多网友的支持评论。为了更好的系统学习这些基础。本人打算写一系列的总结。希望对新手有所帮助,高手多多指点。以下主要涉及是的system命名空间的常用类 基本的Object和Type类,它构成了.NET FrameWork功能的基础。 多用途的类。如Array、Console和String,它们被用于许多不同类型的应用程序。 重要的基... 阅读全文
posted @ 2010-09-14 16:27 英雄不问出处 阅读(245) 评论(0) 推荐(0)
摘要: 系统类 Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类。 DateTime结构,Guid 结构,ICloneable接口,IComparable接口,IConvertible接口, IDisposable类,集合类ICollection接口,IComparer接口,IDictio... 阅读全文
posted @ 2010-09-14 16:23 英雄不问出处 阅读(223) 评论(0) 推荐(0)
摘要: 本文的重点是访问关键字(Access Keywords):base和this。虽然访问关键字不是很难理解的话题,我们还是有可以深入讨论的地方来理清思路。还是老办法,我的问题先列出来,您是否做好了准备。   • 是否可以在静态方法中使用base和this,为什么?   • base常用于哪些方面?this常用于哪些方面?   • 可以base访问基类的一切成员吗?  &... 阅读全文
posted @ 2010-09-14 16:20 英雄不问出处 阅读(291) 评论(0) 推荐(0)
摘要: 问题10:如何获得计算机的所有逻辑驱动器;解决方案:使用DriveInfo类(需要.NET 2.0)DriveInfo.GetDrives():获得计算机的所有逻辑驱动器,返回类型为DriveInfo[];问题11:如何获取指定驱动器的信息;解决方案:DriveInfo.Name:获取驱动器的名称(如C:\);DriveInfo.DriveType:获取驱动器的类型(如Fixed,CDRom,Re... 阅读全文
posted @ 2010-09-14 15:56 英雄不问出处 阅读(545) 评论(0) 推荐(0)
摘要: 文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善。主要内容:一、路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容;二、相关通用文件对... 阅读全文
posted @ 2010-09-14 15:54 英雄不问出处 阅读(659) 评论(0) 推荐(0)
摘要: 1.System.Colloctions中表示集合的行为的接口有:1)ICollection定义所有集合的大小、枚举数和同步方法。派生于IEnumerable它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口)但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义2)IEnumerable公开枚举数,该枚举数支持在集合上进行简单迭代它只有一个方法 GetEnumer... 阅读全文
posted @ 2010-09-14 10:40 英雄不问出处 阅读(189) 评论(0) 推荐(0)
摘要: 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合:a.使用ArrayList 直接将对象放入ArrayList,操作直观,但由于集合中的项是Object类型,因此每次使用都必须进行繁琐的类型转换。 b.使用自定义集合类 比较常见的做法是从CollectionBase抽象类继承一个自定义类,通过对ILi... 阅读全文
posted @ 2010-09-14 10:37 英雄不问出处 阅读(204) 评论(0) 推荐(0)
摘要: 一、基本概念反射:反射是一个运行库类型发现的过程。通过反射可以得到一个给定程序集所包含的所有类型的列表,这个列表包括给定类型中定义的方法、字段、属性和事件。也可以动态的发现一组给定类支持的借口、方法的参数和其他相关信息如基类、命名空间、数据清单等。二、命名空间 1.System.Reflection命名空间内的各类型(1)Assembly 通过它可以加载、了解和操纵一个程序集(2) Assembl... 阅读全文
posted @ 2010-09-14 10:05 英雄不问出处 阅读(440) 评论(0) 推荐(0)
摘要: 例子这个东西其实挺难弄得,弄个简单的,虽然能说明问题但却容易让人觉得没实用价值,弄个有实用价值却又往往牵扯很多别的技术甚至牵扯很多业务逻辑,看起来很复杂很难懂。在这里我尽量追求几个有实用价值又不复杂的例子。1、使用反射通过读取配置文件来动态的创建相关类的对象我们先来看看Main函数和需要动态加载的对象在同一个程序集的情况结构图:接口[代码][代码][代码][代码][代码]如果在不同的程序集下,那主... 阅读全文
posted @ 2010-09-14 09:08 英雄不问出处 阅读(220) 评论(0) 推荐(0)
摘要: 先看一个简单的例子[Table(Name="dbo.[User]")]public partial class User {当C#编译器发现这个属性有一个特性Table时,首先会把字符串Attribute添加到这个名称的后面,形成一个组合名称TableAttribute,然后在其搜索路径的所有命名空间中搜索有相同类名的类。但要注意,如果该特性名结尾是Attribute,编译器就不会把该字符串加到组... 阅读全文
posted @ 2010-09-14 08:52 英雄不问出处 阅读(242) 评论(0) 推荐(0)
摘要: Reflection,中文翻译为反射。这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:Assembly类可以获得正在运行的装配件信息,... 阅读全文
posted @ 2010-09-14 08:51 英雄不问出处 阅读(228) 评论(0) 推荐(0)
摘要: 泛型CLR2.0的一个新特性是泛型。泛型是一个很强大的特性,对于集合类而言尤其如此。.NET1.0中的大多数集合类都基于Object类型。.NET从2.0开始提供了实现为泛型的新集合类。泛型不仅限于类,本章还将介绍用于委托、接口和方法的泛型。本章的主要内容如下:●泛型概述●创建泛型类●泛型类的特性●泛型接口●泛型方法●泛型委托●Framework的其他泛型类型9.1概述泛型并不是一个全新的结构,其... 阅读全文
posted @ 2010-09-14 08:12 英雄不问出处 阅读(492) 评论(0) 推荐(0)