
C#
niuyongjie
计算机领域
展开
-
动态代码的使用(反射和动态生成类)
动态代码的使用(反射和动态生成类)转载 2010-07-31 23:39:00 · 2863 阅读 · 0 评论 -
集合和泛型13-----运行库中的泛型
c#的程序的编译过程分为两个阶段,第一个阶段将源代码编译为为Microsoft中间语言 (MSIL),JIT编译时,才把c#代码编译为本地可以运行的本地代码,就是经常说的EXE文件或者DLL文件。当将源代码编译为为MSIL时,对泛型类或者泛型方法编译时,它包含将其标识为具有类型参数的元数据。泛型类型的 MSIL 的使用因所提供的类型参数是值类型还是引用类型而不同。用值类型指定类型参数原创 2009-03-23 12:54:00 · 1381 阅读 · 1 评论 -
集合和泛型12-----泛型代码中的默认关键字
在编写泛型类或者泛型方法的时候,有时候可能需要将类型参数T的默认值赋值给一个类型参数T的一个变量。可是,在泛型没有具体实例化以前,T到底代表的数据类型是什么,这个不得而知。T到底是值类型还是引用类型?如果T为值类型,则它是数值还是结构?给定参数化类型T的一个变量t,只有当T为引用类型时,语句t = null才有效;只有当 T 为数值类型而不是结构时,语句 t = 0才能正常使用。解决原创 2009-03-23 12:52:00 · 985 阅读 · 0 评论 -
集合和泛型10-----泛型方法与泛型类
泛型方法是包含在某个类中的一类方法的一般形式。可以根据泛型方法生成对不同类型操作的具体方法。泛型方法严格的来说并不是一个方法,它只是一个方法的蓝图,或者说是一类具体方法的写法格式,在这个格式中有一些类型的占位符需要去填写。方法的调用就是把具体类型填写到这些占位符的过程。泛型方法在具体调用的时候,应该在方法名后面的内给出具体的类型。但是在c#中,允许省略掉方法名后面的类型参数,在程序编译的原创 2009-03-23 12:50:00 · 3335 阅读 · 0 评论 -
集合和泛型9-----泛型
泛型是c#2.0引入的一个新的特性,这个新的特性让人激动,由于泛型可以让程序更加简洁,更加安全,更加灵活,更加方便。那么什么是泛型,为什么它具有如此大的功能呢?还是从传统的程序设计开始说起。10.4.1泛型的引入现在实现一个交换两个变量的功能,这个函数名为Change。现在看一下具体的实现。例子Change的代码namespace Change{ class Pro原创 2009-03-23 12:49:00 · 977 阅读 · 0 评论 -
集合和泛型6-----集合4 类SortedList、 BitArray
l 类SortedList所能完成的功能就相当于ArrayList与Hashtable的组合,SortedList元素可通过其键来访问,也可以通过其索引(索引从零开始)来访问,而且类SortedLis里面的元素是经过排序存放的。SortedList对象的元素将由键按照特定的比较方法实现,或按照键本身提供的比较方法实现进行排序。不论在哪种情况下,SortedList 都不允许重原创 2009-03-23 12:41:00 · 1710 阅读 · 0 评论 -
集合和泛型3-----集合2 ArrayList类
10.2.2.2集合类在命名空间System.Collections中提供的集合类主要有类ArrayList、类Stack、类Hashtable、类BitArray、类Queue、类SortedList。这些类中除BitArray外,有一个共同的特点,就是在这些类的定义中,项的类型都是Object类型,所以允许在这些集合中存储任何c#中合法的类型。这样实现的原因主要是为了让用户使用方便,因为O原创 2009-03-23 12:34:00 · 2145 阅读 · 1 评论 -
应用程序配置和动态加载6----反射基本类型
反射基本类型这里说反射基本类型,基本类型是针对泛型类型来说的,因为反射泛型会更加复杂一些。在前面的范例中,获得了程序集中的所有类型,并循环打印了它们,打印结果仅仅显示出了类型的全名,而通常需要关于类型更详细的信息,现在就来看看如何进一步查看类型信息。1.获取基本信息有了前面示例的介绍,下面的示例直接写出代码,如有必要,会在注释中加以说明。我们再写一个方法TypeExplore,用原创 2009-03-23 19:24:00 · 1421 阅读 · 0 评论 -
集合和泛型8-----装箱、拆箱与类型安全
在10.2节中介绍的大多集合能够处理任何类型的数据,因为这些集合定义的处理对象使用了Object类型。当集合处理的数据是c#中的基本类型时,比如int、float、double类型,这些类型在c#中属于值类型,而这些数据进入集合中时,集合能够处理的是Object这样的引用类型,所以在值类型的数据进入集合的时候,需要将值类型包装成引用类型,这个过程就是装箱的过程,从集合中取出数据时,取出的是引原创 2009-03-23 12:47:00 · 1858 阅读 · 0 评论 -
集合和泛型7-----集合5 强类型集合基类
强类型集合基类在System.Collections命名空间中,又提供了3个抽象的基类,它们分别是强类型集合抽象基类CollectionBase、键/值强类型集合抽象基类DictionaryBase、强类型只读集合抽象基类ReadOnlyCollectionBase。这些基类主要是为我们提供创建自定义集合的机会,它们都提供了创建强类型集合的功能,推荐使用它们对这些类进行扩展,而不是自己去原创 2009-03-23 12:44:00 · 1690 阅读 · 0 评论 -
应用程序配置和动态加载1----程序集
本章开始介绍应用程序的配置与动态加载,本章牵涉的知识点很多,有程序集(Assembly)的概念,反射(Reflection)以及特性(Attribute),最后是应用程序的配置问题。在第一章中已经介绍了程序集的基本概念,并且对程序集的作了一些粗略的介绍,那么下面就结合实际的代码或者例子来看一下程序集的真实的面目。在反射中会利用程序集的概念以及反射的原理实现程序集的加载,也就是动态加载程序集。因为在原创 2009-03-23 19:16:00 · 1164 阅读 · 0 评论 -
应用程序配置和动态加载2----创建程序集
创建程序集您可以使用Visual Studio .NET集成开发环境(简称IDE,如 Visual Studio 2008)或 .NET Framework SDK 提供的编译器和工具来创建单文件程序集或多文件程序集。Visual Studio .NET集成开发环境本身不支持创建多文件程序集,如果需要创建多文件程序集,必须求助于命令行工具。现在使用IDE创建一个单文件程序集。打开原创 2009-03-23 19:18:00 · 1579 阅读 · 0 评论 -
vs 2008 不能切换到设计视图的解决办法 ----十分有效
vs 2008 不能切换到设计视图的解决办法转载 2010-07-20 01:55:00 · 2730 阅读 · 0 评论 -
using的三种用法
转载自:http://www.cnblogs.com/windsails/archive/2004/09/12/42444.html1.using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。例如:using System; 一般都会出现在*.cs中。转载 2009-12-10 12:58:00 · 1225 阅读 · 0 评论 -
Microsoft .NET的线程池
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/wdswei/archive/2009/09/27/4597930.aspx 摘要深度研究Microsoft .NET提供的线程池,揭示什么情况下你需要用线程池以及 .NET框架下的线程池是如何实现的,并告诉你如何去使用线程池。内容介绍.NET中的线程池线程池中执行的函数使用定时器转载 2009-12-09 20:17:00 · 1199 阅读 · 0 评论 -
拨云见日---浅谈静态字段与静态构造函数之间的初始化关系以及执行顺序(上)
本文转载大笨的博客,下面是链接地址。 http://www.cnblogs.com/yage 偶然看到一道面试题,题目如下: 1 public class A 2 { 3 public static int X; 4 static A() 5 { 6 X = B.Y + 1;转载 2009-08-23 19:11:00 · 1057 阅读 · 0 评论 -
拨云见日---浅谈静态字段与静态构造函数之间的初始化关系以及执行顺序(下)
本文转载大笨的博客,下面是链接地址。 http://www.cnblogs.com/yage在上篇中留下了一个问题,想来有心的读者已经自行解决问题并且得出了自己的结论。事实上,程序并不是象通常的函数调用,进进入主调函数,然后进入被调函数。在这里,通过单步执行,可以看到程序先进入到类A中进行静态成员的初始化,然后进入到类B中进行B的静态成员的赋值,最后才进入Main函数。我们可以猜测,编译器转载 2009-08-23 19:21:00 · 1189 阅读 · 1 评论 -
c#中s=s+1与s+=1的区别
s=s+1与s+=1在官方网站上据说是等效的,可是在实际的应用中,它们之间还是有一点小小的区别,这些区别造成了一些困惑,现在就对这些区别做一些解释。 前几天一个很牛的朋友问我:“s=s+1与s+=1有什么区别?”,我认为他在开玩笑,因为以这个朋友的实力,不会不知道这个的,我认为这是一个陷阱,赶快到MSDN上 进行查询,得到的结果是:使用 += 赋值运算符的表达式,x +=原创 2009-04-10 09:06:00 · 5305 阅读 · 0 评论 -
应用程序配置和动态加载7----自定义应用程序配置
自定义应用程序配置为了让自己编写的程序更加具有灵活性,往往需要把一些信息放置到程序的外部,等到程序运行时,根据读入的数据的不同,可能让程序具有不同的表现。存放这些信息的文件就称为应用程序的配置文件,有的人将配置信息写入ini的文件中,有的应用程序把这些信息写入数据库。在.Net中,一般采用标准的XML文件作为配置文件。不同的应用程序配置文件的名称不同。在.Net中web程序的配置文件一般原创 2009-03-23 19:26:00 · 2148 阅读 · 1 评论 -
应用程序配置和动态加载5----反射程序集
反射程序集在.Net中,程序集是进行部署、版本控制的基本单位,它包含了相关的模块和类型,同时也包含了描述这些类型的元数据。在System.Reflection命名空间下有一个Assembly类型,它代表了一个程序集,并包含了关于程序集的信息。1.在程序中加载程序集在程序中加载程序的方法主要有下面的几种方法。1.1.隐式加载没有被显式加载但被引用的程序集,CLR会按照全局程原创 2009-03-23 19:24:00 · 2200 阅读 · 0 评论 -
应用程序配置和动态加载3----部署程序集
部署程序集在部署程序集之前,先看一下程序集的分类。因为不同的公司可能会开发出有相同名字的程序集来,如果这些程序集都被复制到同一个相同的目录下,最后一个安装的程序集将会代替前面的程序集。而一个程序运行时,刚好需要加载前面的程序集,这个时候很有可能会出错,因为不同公司开发的程序集虽然名字一样,功能可能会差别很大。这就是著名的Windows “DLL Hell”出现的原因。 很明显,简原创 2009-03-23 19:20:00 · 2023 阅读 · 1 评论 -
集合和泛型5-----集合4 类Hashtable
l 类Hashtable(哈希表)实现的是一种按照“键(Key)/值(Value)”方式存储内部元素的数据结构。键不能为null,但值可以。每个元素都存储在一个叫DictionaryEntry的对象中,所以可以把Hashtable看做是一个DictionaryEntry对象的链表。在一个元素存入Hashtable时,会调用该元素中的键对象提供的哈希函数来得到一个整型的数字(哈原创 2009-03-23 12:40:00 · 1476 阅读 · 0 评论 -
集合和泛型2-----集合1
集合是一组组合在一起的类似的类型化对象。对于集合中的每一个对象一般称为项或者元素。集合类定义在 System.Collections 或 System.Collections.Specialized命名空间中。System.Collections命名空间包含接口和类,这些接口和类定义了各种对象(如列表、队列、位数组、哈希表和字典)的集合以及这些集合应该具备的功能。System.Collect原创 2009-03-23 12:25:00 · 1380 阅读 · 0 评论 -
集合和泛型1-----数组
在程序设计中,需要处理各种样式的数据,而且对这些数据的处理方式和处理的要求可能都不相同。给编程设计带来了很多的麻烦。这些操作使程序设计人员专注于数据的处理以及如何处理数据处理过程中出现的错误与问题,而不能让程序员更对的关注于项目的业务问题。比如,可以使用数组存放类型相同的一组数据,可是在程序运行之前必须确定数组的大小,而且向数组中插入元素或者从数组中删除一个元素时,都比较不方便。为了更加灵活的原创 2009-03-23 12:22:00 · 2826 阅读 · 4 评论 -
委托、事件和Lmbdas表达式1----委托
委托与事件对于接触C#不长的人来说,是一个难于理解的概念,难于理解的原因我认为主要是这两个名称的影响,另外在平时编程中很少见到它们两个的使用,即使有些人使用了委托或者事件,可能也是照猫画虎,没有彻底的了解它们的本质,如果对它们的本质了解了,你会发现它们其实很简单,而且在很多地方都可以使用。Lambda表达式是c#语言新添加的特性,其实这种表达式在其他语言中很早已经出现了,Lambda表达式最早出现原创 2009-03-21 12:20:00 · 1118 阅读 · 0 评论 -
.NET中的加密与解密技术
最近看了张子阳写的一篇。net中的加密与解密技术,感到很好,转载了。转载的地址是http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/Cryptograph.html.Net中的加密解密引言在一些比较重要的应用场景中,通过网络传递数据需要进行加密以保证安全。本文将简单地介绍了加密解密的一些概念,以及相关的数字签名、证书,最后介绍了转载 2009-01-08 11:10:00 · 2203 阅读 · 0 评论 -
使用对称加密与解密算法对文件加密与解密
看了张子阳的博客,自己也看了一些资料,于是动手写了一个对文件加密与机密的小玩意,贴出来供大家参考,呵呵,可能对于高手来说,这个东西显的十分粗糙,希望大侠能够指点一二。首先是程序的运行界面。在该程序中自己写了一个类CryptoHelper,用来实现对文件的加密与解密操作。下面是这个类的源代码。using System;using System.Collections.Gen原创 2009-01-08 11:14:00 · 4529 阅读 · 0 评论 -
Remoting研究
一、 Remoting基础什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft® .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windo转载 2006-10-04 14:53:00 · 2120 阅读 · 3 评论 -
Assembly学习心得(第二部分)
第二部分(例子) 下面是一个完整的例子来逐一说明上面所提到的概念,以加深理解。 整个例子包含7个文件(在主目录下): 主目录为 …/Assembly ----源程序目录 …/Assembly/Bin ---- 编译结果输出的目录,也就是应用程序主目录。 文件名 类型 说明 App.cs Code源文件 主程序,包含程序入口, 属转载 2006-09-13 22:47:00 · 2382 阅读 · 0 评论 -
Assembly学习心得
本文为转贴别人的文章,看了觉得很好,于是动手实现了一下,发现里面有一些小的问题,于是对它进行了整理,本文的99%属于原作者。下面是原作者的文章 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍, 所以我准备记下我的学习心得,已备参考。 各位都是大虾了,如果有哪些错误或者不完整的地方,还请不吝指出。多谢了。 分为两部分: 首先是一些必须了解的概念; 然后是一个完整转载 2006-09-13 22:23:00 · 3055 阅读 · 1 评论 -
利用c#的反射机制得到类的信息
与java一样,c#也提供了反射的机制,只不过JAVA里面使用Class来表示类的信息,而C#里面使用的是Type来表示类的元数据的存储,本人编写了 一个图形界面的利用c#反射机制得到类的信息的程序,本程序有一点问题,希望大侠能够给予帮助。程序的运行界面如图:本程序的源代码如下: using System;using System.Drawing;using System.原创 2006-09-13 19:10:00 · 3266 阅读 · 2 评论 -
c#的委托代码示例
c#的委托其实是一个特殊的类,这个类是一个抽象的类,下面就是它在MSDN中的定义:定义:看来它从接口ICloneable, ISerializable继承而来,所以在使用委托的时候主要分为三步1。声明一个委托,比如是SomeDelegate,2。生成委托 SomeDelegate的实例,将需要委托的方法作为参数传给委托3。调用这个委托实例。委托可以与静态绑定,也原创 2006-09-13 09:24:00 · 2271 阅读 · 2 评论 -
c#的事件实现的原理
如果你看了本BLOG写的委托的文章,理解本文应该比较容易,C#中的事件的实现是通过委托直接实现的,所以本文只给出事件实现的代码示例,如果你明白了委托,相信看懂本代码应该不难。 using System;namespace Events{ delegate void SomeDelegate(string sender); interface ISomeInt原创 2006-09-13 09:35:00 · 2841 阅读 · 2 评论 -
委托、事件和Lmbdas表达式2-事件
在C#程序设计中所谓事件,就是由某个对象发出的消息。这个消息标志着某个特定的行为发生了,或者某个特定的条件成立了。比如用户点击了鼠标,这一单击就会引起Windows给按钮消息处理程序发送一个消息,这就是OnClick事件。在深入讲解事件之前,必须先弄明白几个概念。发布者(publisher)与订阅者(subscriber),一个消息的发送者 (Sender)称之为发布者,而该消息的接收者 (R原创 2009-03-21 12:25:00 · 1094 阅读 · 0 评论 -
委托、事件和Lmbdas表达式3----委托相关知识
与委托相关的知识点有很多,本节仅仅就委托的协变和逆变、匿名方法、方法组转换与Lambda表达式做一些介绍。8.5.1 委托的协变和逆变在面向对象设计程序中,允许把派生类的对象赋值给基类的对象,如果从继承关系来看,允许从底层对象向高层对象的转换,并且这种转换是自动的。根据这一规律,对于委托来说可以得出两个有用的知识点。这个就是协变与逆变。协变:从一个方法或者函数的返回类型来看,返回原创 2009-03-21 12:30:00 · 921 阅读 · 0 评论 -
应用程序配置和动态加载4----反射
反射在程序集中可以包含多个模块,而每个模块中又可以包含类、接口、委托等类型,在每个类型中又因为类型的不同包含不同的组成部分,比如类(class)中又可以包含字段、属性、方法、实现的接口、继承的父类等信息。字段又可以有类型,名称,是否是静态的等性质,方法中有参数,返回类型等信息。这些信息对于程序的编制人员来说没有什么神秘的,因为这些东西都是程序员自己实现的。可是对于使用这些材料的另外的用户原创 2009-03-23 19:22:00 · 870 阅读 · 0 评论 -
集合和泛型11-----泛型委托与泛型事件
委托也可以泛型化,也就是委托也定义自己的类型参数,这样的委托称为泛型委托。在使用委托的代码中可以给委托指定类型参数的具体类型,而让泛型委托实例化为具体的委托实例。就像实例化泛型类或调用泛型方法一样。定义一个泛型委托的语法格式:[public|private|protected] delegate 返回类型 委托名类型参数列表>(参数列表)例如public delegate voi原创 2009-03-23 12:51:00 · 5229 阅读 · 2 评论 -
集合和泛型4-----集合3 Stack类,类Queue
l Stack类是数据结构栈的实现,栈是一个具有“先进后出”特点的数据结构,在Stack类中没有容量Capacity的属性,只有用来表示栈中数据元素个数的Count属性,而且因为栈操作的特点,在Stack类中,只有3个比较有特点的方法。表10-4列出了类Stack具有特点的操作。表10-4 类Stack具有特点的操作方法名称功能解释原创 2009-03-23 12:37:00 · 1198 阅读 · 0 评论 -
C#2008语言特征6----匿名类型
前面已经讲过匿名方法,在c#3.0中将匿名向前推进了一步,现在连类型也可以匿名了。匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需显式定义一个这个对象的类型。类型名由编译器生成,并且不能在源代码级使用。这些属性的类型由编译器推断。匿名类型是使用 new 运算符和对象初始值设定项创建的。匿名类型是由一个或多个公共只读属性组成的类类型。不允许包含其他种类的类成员原创 2009-03-21 12:43:00 · 734 阅读 · 0 评论 -
C#2008语言特征5----对象和集合初始值语法
对于这个标题,不同的资料叫法不同,“对象和集合初始值设定项”、“对象和集合初始化器”等跟这里要讲的内容指的都是一会事情。现在定义一个类Point,里面有两个double类型的私有字段x与y,使用x表示点的横坐标,使用y表示点的横坐标。如果类的定义如下:class Point { private double x; private doub原创 2009-03-21 12:40:00 · 968 阅读 · 0 评论