.Net
文章平均质量分 52
CsToD
这个作者很懒,什么都没留下…
展开
-
正则小技巧
前两天在CSDN看到这样一个问题:给定一段文字的编码序列,如604F20007D59(你 好),如何得到其对应的文字有人给出了如下正则解决方案: string input = "4F600020597D"; string patern = "(? string output = Regex.Unescape(Regex.R原创 2009-07-21 09:10:00 · 306 阅读 · 0 评论 -
C#深入剖析(1)——事件
准备写一个系列文章,深入探讨C#及.Net中的某些特性。 第一篇 事件 事件相信每个人都不陌生,随便一个WinForm程序,就会使用大量的事件,比如: C# code <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/原创 2009-06-15 22:35:00 · 663 阅读 · 3 评论 -
C#深入剖析(2)——析构函数
第二篇 析构函数 析构函数在C#中已经很少使用了,以至于很多人已经把它淡忘了,虽然用处不大,研究一下也无妨。 一. 析构函数的特征: 析构函数只能存在于类中,而不能存在于结构中;析构函数不能有任何修饰符,包括访问控制修饰符,静态修饰符,抽象修饰符,虚拟修饰符等都不能有;析构函数没有参数,这就意味着不能有任何重载。 二. 析构函数的调用时机: 析构函数会在对象被垃圾收集器回收时调用,但垃圾收集原创 2009-06-16 23:00:00 · 715 阅读 · 0 评论 -
托管函数的挂钩
很早以前就想研究一下托管函数的挂钩,但是一直没有成功。前段时间又尝试了一次,竟然成功了,这让我十分的困惑——因为我几乎没有对代码做任何改变! 这次实验距离以前已经有很长时间了,我实在想不出有什么不同之处,唯一的区别就是以前用的是控制台程序,这次是WinForm程序,但我想不可能是这个原因吧?不过我还是尝试了一下,未曾料到竟真是如此! 我当然不会相信这样的灵异事件! 于是我想原创 2009-06-28 21:33:00 · 673 阅读 · 0 评论 -
拆分字符串的几个技巧
1、 如何获得一个已知的字符串数组?例如你可能会这样做:String[]strs={“one”,”two”,”three”,”four”};这样显得有点复杂,更为简单的方法是:String[]strs=”one two three four”.Split();2、 如何获得一个已知的字符数组?跟上面类似,应该这样:Char[]cs=”abcde”.ToCharArr原创 2009-06-29 09:09:00 · 536 阅读 · 0 评论 -
如何用代码打开系统的“运行”对话框
如何用代码打开系统的“运行”对话框这个问题我很早之前就知道了,但今天要用的时候,居然给忘了,查了好半天才搞出来,所以这里有必要记录一下,另外也可以了解一下COM的调用及C#4.0中的Dynamic Lookup。所谓“运行”对话框,就是开始菜单里的那个运行,其快捷键为Windows+R,相信很多人都用过,我这里介绍三种方法来打开“运行”对话框:一、模拟按键由于.NET类库里的Sen原创 2009-11-10 13:26:00 · 2203 阅读 · 0 评论 -
C#程序集加载方法
原文: http://blog.csdn.net/podded/archive/2008/10/27/3158687.aspx 要从程序集的元数据中获取程序集的信息,首先需要加载程序集。.Net中加载程序集方法有几种,本人结合自己的实践和认识简单介绍一下。描述不一定很准确,请提出来一起进步。一、隐式加载 没有被显式加载但被引用的程序集,CLR会按照全局程序集缓存(GA转载 2009-11-27 11:04:00 · 2387 阅读 · 1 评论 -
WPF学习心得(2)——模板
WPF学习心得(2) 模板 首先声明,我这里所说的模板,专指WPF中的控件模板(ControlTemplate),而其它的一些模板,如数据模板(DataTemplate)等不在本文的讨论范畴。 模板适用于这样一种场合:控件在功能上满足程序的要求,但界面上不能(或不方便)满足程序的要求,比如说:我们更改一个控件的外观,都是基于其已有的属性——要更改其背景色,设置Back原创 2009-12-16 16:36:00 · 1078 阅读 · 0 评论 -
WPF学习心得(1)——资源
WPF学习心得(1) 资源 WPF中的资源一般是指资源字典(DictionaryResource)中的元素,可以把任何对象置于其中以便访问。 要获得一个资源字典,可以新建:ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x原创 2009-12-15 15:14:00 · 1468 阅读 · 1 评论 -
WPF学习心得(3)——触发器
WPF学习心得(3) 触发器 触发器包括以下几种:属性触发器 EventTrigger 和 Storyboard MultiTrigger、DataTrigger 和 MultiDataTrigger 本系统讨论其中的两种:属性触发器和事件触发器,由于属性只能出现在样式中,故本文只讨论事件触发器,属性触发器的内容将在样式一章中涉及。 示例代码如下:原创 2009-12-17 15:11:00 · 1288 阅读 · 0 评论 -
WPF版的WindowFromPoint
在Win32 API中,有一个非常有用的函数,叫做:WindowFromPoint而在WPF中,有一个类型的函数,叫做:HitTest(InputHitTest),但是这个函数探测的太深了,往往会探测到控件的子元素上去于是我写了一个WPF版的WindowFromPoint函数,为了在一个函数里实现全部的功能,使用了Lambda表达式的递归实现(估且叫伪递归吧),所以对很多人来说,可能会显然原创 2010-03-10 00:27:00 · 994 阅读 · 0 评论 -
解决使用用户控件时,由于使用了当前路径导致设计器不能正常工作的问题
当在用户控件中使用当前路径时,如果使用下列方法,可能会导致设计器不能正常工作: Environment.CurrentDirectoryPath.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)Path.GetDirectoryName(Assembly.GetEntryAssembly().Loca原创 2010-04-02 16:43:00 · 450 阅读 · 0 评论 -
发送电子邮件
很早之前就用过,不过每次要使用的时候还是要在网上查一下,所以干脆写下来,以备后用。为了方便使用,做了几个重载:public class EMailSender{ public static void SendEMail(string senderAddress, string password, string host, string receiverAddress, string subject, string body, string attachmentFile = null, stri原创 2010-08-10 15:05:00 · 632 阅读 · 0 评论 -
注意了,由于代码优化,可能导致调试时源代码不匹配
最近出现一怪事:调试时断点不匹配,而且找不到标识符例如:void Foo(){int a=SomeMethod();//断点在这一行Console.WriteLine("OK");}我把断点设在第一行,调试时居然自动跑到第二行去了;而且我想在监视窗口中看一下a的值,结果提示我当前上下文不存在名称a类似的问题出现好几次了,我的感觉就是符号文件出问题了,Clean之后问题依旧今天又遇到这个问题了,突然一想,会不会是因为编译成Release的原因呢?(手头这个项目之前已经完成了,最近有点改动,所以没有改成Debu原创 2010-08-10 16:14:00 · 709 阅读 · 0 评论 -
托管函数的挂钩(完美版)
我之前发过一篇叫“托管函数的挂钩”的文章,实现了对MarshalByRefObject继承树下的实例函数的挂钩。最近,在CodeProject上看到一个关于托管函数挂钩的文章,发现作者的方法很好用,但是正好不能用于MarshalByRefObject继承树下的实例函数(作者本人并没有发现这个问题),于是两种方法正好互补你也许要用,我为什么要强调MarshalByRefObject继承树呢?这是因为非常多的类都存在于该类的继承树下,比如很多人习惯把代码写在自己的窗体类中,而Form就在MarshalByRef原创 2011-03-20 11:52:00 · 986 阅读 · 0 评论 -
引用类型与地址之间的转换
<br />很早之前就在网上找到引用对象转地址的方法,后来自己研究出了地址转引用类型的方法,当时很兴奋,还准备把自己的研究过程写下来。<br /> <br />今天要用下这个功能,居然发现没有任何记录,敢情当初忘了写了?<br /> <br />又费了好半天功能,才把这个功能重写了一次,这次就不写过程了,直接上代码:<br /> <br /> <br /> IntPtr ObjectToAddress(object obj) { GCHandle g原创 2011-03-31 11:58:00 · 448 阅读 · 0 评论 -
继续多线程、异步的研究
今天继续研究了下多线程、异步,并对昨天的代码进行了多次修改,已在上篇文章中更新了。 通过对于实现异步的多种方式,发现还是直接开线程最快,另外.Net提供了一些便利的方法,比如线程池、异步委托,不过效率都较之直接开线程慢,我估计异步委托就是用线程池来做的,因为两者效率差不多。另外还有许多类提供了Begin.. End..之类的方法来实现异步调用,很奇怪的事,居然IAsyncResult接原创 2009-06-13 22:13:00 · 285 阅读 · 0 评论 -
多线程端口扫描
今天在论坛发了一个帖子:【200分】多线程问题最后我把代码封装了一下: public class PortScan{ public static void ScanOpenedPorts(int count, string host, int start, int end, Action portReady, Action completed) {原创 2009-06-12 22:34:00 · 437 阅读 · 0 评论 -
由struct的静态构造函数说起
转自路西菲尔的文章,原文在这里 最近才知道struct和class的静态构造函数的触发规则是不同的,不像class在第一次使用类的时候触发静态构造函数。如果只访问struct实例的字段是不会触发静态构造函数调用的。通过测试发现当访问静态字段,struct本身的函数(静态和实例)和带参数的构造函数就会引起静态构造函数的执行。而调用默认构造和未覆写的基类虚函数是不会的。为什么呢? 让我们转载 2009-06-09 21:40:00 · 377 阅读 · 0 评论 -
对象的深拷贝
今天遇到一个问题,如何深层拷贝一个对象? 想了一个方法,前提是所有相关类型都必须具有公共、无参、实例构造函数。 public object DeepCloneObject(object obj) { object newObj = Activator.CreateInstance(obj.GetType()); foreach原创 2009-07-24 17:19:00 · 349 阅读 · 0 评论 -
如何获得一个对象的引用的类型
很早就有一个疑问:class Father{}class Son:Father{}Father obj=new Son();如何写一个方法,得到obj的引用的类型为Father,而其本身的类型为Son呢? 以前只知道调用obj.GetType()就得到了其自身的类型Son,但是一直不知道怎么得到其引用的类型,这两天不经意间研究出来了一个方法: vo原创 2009-07-26 11:28:00 · 490 阅读 · 0 评论 -
对象的深层拷贝
遇到这么个问题,没有参考任何资料,自己想了个方法对于自定义的一些简单类型还好,遇到.Net里一些复杂的类就无能为力了,不知道还有什么更好的方法。 class CsToD{ //基本思想是:一个对象所占据的内存空间,取决于它的实例字段(包括继承树上的私有实例字段) public T DeepCloneObject(T obj) where T : class {原创 2009-07-29 14:15:00 · 1027 阅读 · 0 评论 -
Visual Studio 2010 Beta 1 发布了
期待已久的VS2010终于发布了Beta1,今天下载下来安装了,感觉还不错。从今天开始,决定在CSDN博客上写写文章,希望能坚持下来。原创 2009-05-20 15:48:00 · 215 阅读 · 0 评论 -
迭代器的延迟计算
很早就用过迭代器了,今天才发现它的延迟特性,汗。。。昨天在看.Net 4.0的新特性时,看到一个枚举文件系统的新方法。其实我很早之前就知道4.0会提供这样的方法,但我一直以为会用委托、事件或接口来实现,所以当我看到下面这段话时,很是惊讶:File System Enumeration ImprovementsNew enumeration methods in the <a i原创 2009-05-23 08:59:00 · 281 阅读 · 0 评论 -
堆栈与托管堆
这是雨痕的的文章,原文在这里。关于 CLR 内存管理模式,各种书籍和网络文章各执一词,十分混乱。大多数时候也只是泛泛提到 "托管堆" 和 "堆栈" 而已,其实际过程非常复杂。鉴于没有一个统一的说法,我也不能保证本文的准确性。当 CLR 创建执行线程时,会依据 mainfest 中的 ".stackreserve 0x00100000" 指令为当前线程分配 1MB 的调用堆栈(Call Stac转载 2009-05-21 22:42:00 · 787 阅读 · 1 评论 -
如何设置结构中只读属性的值
有这样一个结构: struct Demo{ private int _val; public int Val { get { return _val; } }} 要求生成一个Demo的实例,并使之Val属性返回5。对于一个初学者而言,这是不可能的,因为Val属原创 2009-05-22 06:38:00 · 412 阅读 · 1 评论 -
在VB.NET中使用转义字符
VB.NET 里面不太好表达转义字符,通常的方法是用字符串连接的方法比如要表达一个跟C#中"I/r/nlove/r/nyou"相同的字符串,需要这样写:"I" + vbCrLf + "love" + Chr(10) + Chr(13) + "you"实在是太麻烦了。其实有简单的方法,如下:Regex.Unescape("I/r/nlove/r/nyou")其中Regex位于原创 2009-05-27 20:37:00 · 1162 阅读 · 0 评论 -
一段很优雅的Linq代码
来自MSDNusing System;using System.IO;using System.Linq;class Program{ static void Main(string[] args) { try { var files = from file in Directory.EnumerateFiles(@"c:/转载 2009-05-28 06:47:00 · 369 阅读 · 0 评论 -
浅谈 MetadataToken
原文在这里 概念: 要说MetadataToken,首先的先说说Metadata,MSDN对Metadata的定义是这样的“Metadata refers to declarative information about abstractions, including runtime types (classes, value types, and interfaces), global转载 2009-05-24 16:32:00 · 1359 阅读 · 2 评论 -
结构内存布局
本来打算写一篇文章,详细地讨论一下结构的内存布局,但是想了下,跟路西菲尔的这篇文章也差不多,所以这里只做一下补充:一、对齐长度如果没有显式的指定对齐长度,将以结构中占用空间最大的成员的长度作为对齐长度;如果要显式指定对齐长度,需设置StructLayoutAttribute.Pack,如: [StructLayout(LayoutKind.Sequential,Pack=4)]原创 2009-05-26 20:14:00 · 435 阅读 · 0 评论 -
Parse方法解析字符串
今天才注意到Parse方法解析字符串时可以通过NumberStyles枚举和IFormatProvider接口分析字符串的格式。原创 2009-06-02 21:43:00 · 554 阅读 · 0 评论 -
随便写点
今天看了下StringFormat类;对正则表达式里分组的捕获有了更深地了解。原创 2009-06-04 21:49:00 · 332 阅读 · 1 评论 -
托管注入深入研究 (《黑客防线》2008.12)
这是我发表在《黑客防线》2008年12期上的一篇文章,这里是网络上的首发。 附件是我写的一个工具“超级间谍(SuperSpy)”,主要包括一个窗口探测功能,甚至能够探测到VC自带的SPY++所不能探测到的窗口;当然,还包括这里提到的“托管注入”功能。 程序需运行在.Net2.0以上,如果需要使用注入功能,则需要.Net3.5以上。 超级间谍下载地址: http://download.csdn.ne原创 2009-06-05 22:12:00 · 1178 阅读 · 4 评论 -
类和结构的区别
来源于 C#编程语言详解(第2版) 11.3 类和结构的区别结构在以下几个重要方面与类不同:— 结构是值类型(参见11.3.1小节)。— 所有结构类型都隐式地继承自类System.ValueType(参见11.3.2小节)。— 对结构类型的变量进行赋值,将创建所赋的值的一个“副本”(参见11.3.3小节)。— 结构的默认值的生成方式为:将所有值类型的域设置为它转载 2009-06-07 22:24:00 · 529 阅读 · 0 评论 -
自定义超时
这是一个很有意思的话题:很多时候,一个操作如果成功的话,很快就会得到响应,反正,只有当长时间没有响应,我们才能确定该操作失败。例如Ping一个主机,如果主机可以连接的话,马上就有反应;反之,如果对于Ping命令,主机长时间不响应,我们才能认定主机无法连通。所以这里有个TimeOut的问题。问题是,很多操作并不提供一个设置超时的方法,例如通过Dns.GetHostByAddress解析主原创 2009-06-06 22:12:00 · 374 阅读 · 0 评论 -
用正则表达式更新源字符串
问题源于这个帖子:http://topic.csdn.net/u/20090608/11/6118ebe2-5ed5-4305-9947-d9573a26e764.html?seed=1379233329 我把这个问题转换成了7,9楼所述,最后我的实现方法是: class CsToD { private string[] groups;原创 2009-06-08 22:04:00 · 225 阅读 · 0 评论 -
FromHandle与FromChildHandle的区别
我在使用PropertyControl插件的时候,经常遇到一个问题,就是无法用窗口探测器探测到WebBrowser,原因很简单,探测到的句柄本身并不是Control对象,可能是它的一个子控件,而这个控件并没有封装成System.Windows.Forms.Control对象,所以解决办法是:如果FromHandle返回null,则继续枚举其父控件,只到找到为止,本来想自己写的,无意中发现了Fr原创 2011-06-07 16:21:00 · 718 阅读 · 0 评论