博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年10月11日

摘要: 1.命名控件与程序集的区别。 命名空间用于对类型进行逻辑分组。程序集则是程序的物理分组,对应于一个dll或exe文件。 2.为什么要使用两种方式分组?把逻辑分组作为物理分组不是更简单吗? 逻辑分组主要针对开发人员,而物理分组主要针对安装和部署。 除此之外,以下情况也需要使用两种方式分组,否则会很不方便。 1)团队开发。一个公司分处不同的部门共同开发同一个命名控件的不同类型。那么不同的部门可以把他们开发的东西编译成各自的dll文件。使用时把几个dll一起引用即可。 2)一个命名控件里包含的类型太多,而有大部分是用不上的。如果把一个命名空间编译成一个dll,则会降低运行效率。 3)有时需要对一个命 阅读全文

posted @ 2011-10-11 13:44 Honor 阅读(162) 评论(0) 推荐(0)

摘要: 原理如下:1、利用反射进行动态加载和调用.Assembly assembly=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dllAssembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名2、加载dll后,需要使用dll中某类.Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型3、需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略Object obj = Activator.Cr 阅读全文

posted @ 2011-10-11 13:43 Honor 阅读(1567) 评论(0) 推荐(0)

摘要: 修饰符用于限定类型以及类型成员的申明,C#中的修饰符按功能可分为四部分:属性修饰符,存取修饰符,类修饰符和成员修饰符。 属性修饰符:[Serializable]:按值将对象封送到远程服务器。在按值封送对象时,就会创建一个该对象的副本,并将其序列化传送到服务器。 任何对该对象的方法调用都是在服务器上进行的。 [STAThread]:是Single-Threaded Apartment单线程套间的意思,是一种线程模型(线程模式用于处理组件在多线程的环境里并行与并互的方式),套间线程(STAThread)模式中接口跨线程传递必须被调度(Marshal),不调度直传肯定会失败!而MTA或FreeThr 阅读全文

posted @ 2011-10-11 13:43 Honor 阅读(146) 评论(0) 推荐(0)

摘要: 1,Assembly.Load() 这个方法通过程序集的长名称(包括程序集名,版本信息,语言文化,公钥标记)来加载程序集的,会加载此程序集引用的其他程序集,一般情况下都应该优先使用 这个方法,他的执行效率比LoadFrom要高很多,而且不会造成重复加载的问题(原因在第2点上说明) 使用这个方法的时候, CLR会应用一定的策略来查找程序集,实际上CLR按如下的顺序来定位程序集:⑴如果程序集有强名称,在首先在全局程序集缓(GAC)中查找程序集。 ⑵如果程序集的强名称没有正确指定或GAC中找不到,那么通过配置文件中的<codebase>元素指定的URL来查找⑶如果没有指定强名称或是在GA 阅读全文

posted @ 2011-10-11 13:43 Honor 阅读(223) 评论(0) 推荐(0)

摘要: .net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以保护dll方法一般为 :强签名+混淆+加密。强签名强命名程序集,可以确保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果签名也会不同。注:未签名的主程序可以引用已签名或未签名的程序集;而已签名的主程序不能引用未签名的程序集。(上述文章有相应解决办法)混淆混淆就是对编译生成的MSIL中间代码进行模糊处理,最简单的混淆是名称混淆,即将 命名空间名、类名、方法名、字段名等统统换成特殊符号或其它符号,目的就是让人看到晕为止,但 阅读全文

posted @ 2011-10-11 13:42 Honor 阅读(208) 评论(0) 推荐(0)

摘要: 只能输入数字:"^[0-9]*$"只能输入n位的数字:"^\d{n}$"只能输入至少n位的数字:"^\d{n,}$"只能输入m~n位的数字:"^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"只能输入非零的正整数:"^\+?[1-9][0-9]*$"只 阅读全文

posted @ 2011-10-11 13:42 Honor 阅读(118) 评论(0) 推荐(0)

摘要: DateTime 数字型System.DateTime currentTime=new System.DateTime();取当前年月日时分秒 currentTime=System.DateTime.Now;年=currentTime.Year;月=currentTime.Month;日=currentTime.Day;时=currentTime.Hour;分=currentTime.Minute;秒=currentTime.Second;毫秒=currentTime.Millisecond;Int32.Parse(变量) Int32.Parse("常量")变量.ToStr 阅读全文

posted @ 2011-10-11 13:41 Honor 阅读(140) 评论(0) 推荐(0)

摘要: 获取当前进程的完整路径,包含文件名(进程名)。string str = this.GetType().Assembly.Location;运行结果: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;运行结果: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)获取和设置当前目录( 阅读全文

posted @ 2011-10-11 13:41 Honor 阅读(107) 评论(0) 推荐(0)

摘要: Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。 Convert.ToInt32的参数比较多 Int.Parse只能转换string类型的Int转化其他数值类型为Int时没有四舍五入,强制转换 阅读全文

posted @ 2011-10-11 13:39 Honor 阅读(137) 评论(0) 推荐(0)

摘要: Using(1)引用命名空间using作为引入命名空间指令的用法规则为:using Namespace;在.NET程序中,最常见的代码莫过于在程序文件的开头引入System命名空间,其原因在于System命名空间中封装了很多最基本最常用的操作,下面的代码对我们来说最为熟悉不过:using System;这样,我们在程序中就可以直接使用命名空间中的类型,而不必指定详细的类型名称。using指令可以访问嵌套命名空间。关于:命名空间命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。例如,在.NET中很多的基本类型都位于Sys 阅读全文

posted @ 2011-10-11 13:38 Honor 阅读(171) 评论(0) 推荐(0)