摘要:
1. 窗口都是windows标准窗口,有窗口句柄,但是console window没有消息循环,直接从缓冲区读数据,显示数据。 windows中普通窗口都有自己的窗口过程, 我可以使用SetWindowlong来修改窗口过程, 但是控制台窗口修改后去无法收到消息, 都是窗口为什么控制台的不能通过修改 阅读全文
随笔档案-2017年06月
Windows Form, Ok, Cancel button
2017-06-04 17:37 by Dirichlet, 343 阅读, 收藏, 编辑
摘要:
1. 为button设置DialogResult property为非None值, 可以关闭父窗口,并使父窗口的DialogResult property返回相应的值。 http://msdn.microsoft.com/en-us/library/system.windows.forms.butt 阅读全文
Oracle中根据列名找到所属的表
2017-06-04 17:36 by Dirichlet, 3975 阅读, 收藏, 编辑
摘要:
oracle中如何根据一个字段名查找出所属的表名? 用如下语句, select * from user_tab_columns where column_name='列名', 例子:select * from user_tab_columns where column_name='ALWAYS_US 阅读全文
面向对象原则
2017-06-04 17:35 by Dirichlet, 181 阅读, 收藏, 编辑
摘要:
依赖倒置原则 面向接口编程。尽量依赖于接口或抽象类而不是具体类,减少模块和模块之间的耦合。 模块间的依赖是通过接口或者抽象类发生;实现类之间不发生直接的依赖关系,其依赖关系也是通过接口或抽象类产生的; 实现类依赖接口或抽象类。 依赖倒转原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独 阅读全文
显式接口实现
2017-06-04 17:32 by Dirichlet, 244 阅读, 收藏, 编辑
摘要:
一个类实现的多个接口里面有相同函数,而多个接口里的相同签名函数确实需要不同的实现,此情况下可以用显示接口避免。 两点注意:需要加接口名限定前缀,不需要加public修饰符,因为显式接口成员只能通过接口来使用,不能通过对象引用使用,所以有时是public,有时是private,不需要加public修饰 阅读全文
工厂模式总结
2017-06-04 17:30 by Dirichlet, 270 阅读, 收藏, 编辑
摘要:
一. Builder模式 用于构建复杂对象,将复杂对象的构建与表示分离。主要对象有Director导向器,Builder生成器,最终要生成的Product对象。 着重于Director按步骤一步一步构建出最终对象。Builder有一个类层次 理解模式和模式适用范围: 1. 表示与构建分离。Direc 阅读全文
xml操作总结
2017-06-04 17:29 by Dirichlet, 262 阅读, 收藏, 编辑
摘要:
1. Document有两个子节点,xml头描述节点和book节点。book节点是top level点节点,可以通过DocumentElement属性得到。是能有一个top level element节点。Only one top level element is allowed in an XML 阅读全文
抽象类与接口异同
2017-06-04 17:28 by Dirichlet, 184 阅读, 收藏, 编辑
摘要:
1. 抽象类用abstrac修饰, 如abstrac class E。 抽象类里的抽象方法也用abstract修饰,如public abstract override void DoWork(int i); 抽象类里可由数据成员,可以实现方法。 当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写 阅读全文
(转载)将一段符合XML格式规范字符串插入已有XML文档当中
2017-06-04 17:27 by Dirichlet, 553 阅读, 收藏, 编辑
摘要:
想我们已经存在一个XML文档,结构如下: < xmlversion="1.0"encoding="utf-8">< employees>< employeeclass>< firstname>symbol< /firstname>< lastname>sn< /lastname>< /employe 阅读全文
观察者模式
2017-06-04 17:21 by Dirichlet, 264 阅读, 收藏, 编辑
摘要:
1. .Net可以很好地支持委托,事件,用事件来实现观察者模式很简洁,最大程度地减少了观察者与Subject之间的耦合。 2. 下面的例子是一个同事用模板实现的观察者模式: ISubject subject IObserver Client program 阅读全文
观察者模式-最终话
2017-06-04 17:21 by Dirichlet, 190 阅读, 收藏, 编辑
摘要:
优点 在 .NET 中实现 Observer 有以下优点: 取消了依赖性。上述示例清楚地显示出 Album 和 BillingService 类之间的依赖性已经取消。 提高了可扩展性。“.NET 中的观察器”示例说明了添加新类型的观察器是多么简单。Album 类是“开-闭”原则的一个例子,最初是 B 阅读全文
泛型编程
2017-06-04 17:20 by Dirichlet, 211 阅读, 收藏, 编辑
摘要:
理论点: 声明一个具体的泛型类时,编译器会至少做一个全面的字面上的类型替换,将T替换成具体的类型参数。不仅是字面上的替换,还包括全面的语义上的替换,做类型检查,检查T是否为有效的指定类型。 如何使用: 1. 普通方法与泛型方法 2. 泛型类的类型参数与内部泛型函数的类型参数不能相同。如果内部的泛型函 阅读全文
迭代器模式
2017-06-04 17:17 by Dirichlet, 274 阅读, 收藏, 编辑
摘要:
C#中的IEnumerator实现了一个标准的iterator模式。 Iterator相当于collection对象的一个指针/游标/。 提问:迭代功能直接实现在Collection对象里可以吗?比如用索引下标的方式? 回答:可以,用索引来迭代也是一个好办法。但是这样一来,就不能同时对同一个coll 阅读全文
XML Schema
2017-06-04 17:15 by Dirichlet, 159 阅读, 收藏, 编辑
摘要:
最常用的类型是: xs:string xs:decimal xs:integer xs:boolean xs:date xs:time 1. 文件格式 <xs:element name="xxx", type="YYY"/> // 法国 <xs:element name="color" type=" 阅读全文
xml schema复杂类型
2017-06-04 17:15 by Dirichlet, 349 阅读, 收藏, 编辑
摘要:
xml schema复杂类型 对于复杂类型,xs:complexType, xs:sequence子节点必须有。 // 有xsd文件生成cs类 xsd /c /l:cpp sample1.xsd // // <auto-generated> // This code was generated by 阅读全文
我在面试.NET/C#程序员时会提出的问题(转载)
2017-06-04 17:14 by Dirichlet, 491 阅读, 收藏, 编辑
摘要:
转自:http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html 说起来我也面试过相当数量的.NET(包括C#,后文不重复)程序员了,有的通过电话,有的面谈。后来发现,其实提的问题来来回回也就那么 阅读全文
C# 中安全代码与不安全代码
2017-06-04 17:13 by Dirichlet, 687 阅读, 收藏, 编辑
摘要:
C# 中安全代码与不安全代码 P/Invoke 非托管代码需要在unsafe块中书写。 // 参考文章 http://msdn.microsoft.com/en-us/library/system.intptr.topointer.aspx http://msdn.microsoft.com/en- 阅读全文
解决控件中有大量的事件的方法
2017-06-04 17:12 by Dirichlet, 173 阅读, 收藏, 编辑
摘要:
给每个事件创建static对象 object,作为hashtable的键值,当有事件订阅时,以object的hashcode为键值,以动态创建的委托示例为value插入到内部的hashtable中。 技巧: 1. 要显式实现时间的Add,Remove方法。类似属性的写法。 阅读全文
readonly const关键字
2017-06-04 17:11 by Dirichlet, 201 阅读, 收藏, 编辑
摘要:
readonly 关键字与 const 关键字不同。 const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。 另外,const 字段为编译时常数,而 readonly 字段可用于运行时常 阅读全文
CLR内存回收总结,代龄机制
2017-06-04 17:11 by Dirichlet, 279 阅读, 收藏, 编辑
摘要:
关键字:对象可达图,代龄机制,终止化对象。 代龄机制: 0代满了之后,GC开始回收,剩下的对象升级为1代。(只有不可达的对象才会被回收。) 0代再回收几次之后,1代的对象慢慢增多然后达到阈值,GC同时回收0,1代对象。(只有不可达的对象才会被回收。) 1代回收剩下的升级2代,同样2代满了,GC会同时 阅读全文
静态构造函数, 静态成员初始化/调用顺序
2017-06-04 17:10 by Dirichlet, 1369 阅读, 收藏, 编辑
摘要:
1)第一次调用类的任何成员之前,执行静态成员的初始化动作,执行顺序是:静态成员初始化 >静态构造函数 >调用类的某成员(构造器,静态字段/属性/函数,) 2)在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。调用静态构造函数之前会先做静态成员的初始化。同1)。 如果类包含静态字段,请提 阅读全文
IEnumerable, IEnumerator接口
2017-06-04 17:06 by Dirichlet, 185 阅读, 收藏, 编辑
摘要:
IEnumerable接口 IEnumerator接口 示例1: class MyClass : IEnumerable { private int[] sources; public MyClass() { this.sources = new int[] { 0, 1, 3, 3, 4, 5, 阅读全文
值类型,Nullable类型
2017-06-04 17:06 by Dirichlet, 412 阅读, 收藏, 编辑
摘要:
1. 值类型 比如说int吧,是值类型,是个struct,是这样声明的 哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType?? 直接打印int的基类确实显示基类是ValueType. 回答: ValueType的确是class,但是他的子类却是值 阅读全文
LAMDA表达式
2017-06-04 17:05 by Dirichlet, 268 阅读, 收藏, 编辑
摘要:
LAMDA表达式 (input parameters) => {statement;} (input parameters) => {statement;} (input parameters) => {statement;} (input parameters) => {statement;} L 阅读全文
显示接口实现
2017-06-04 17:04 by Dirichlet, 211 阅读, 收藏, 编辑
摘要:
显示接口实现用途: 1. 对象实现的两个接口中有同名函数。 2.显示接口没有修饰符,只能通过接口访问。 阅读全文
异常设计总结
2017-06-04 17:03 by Dirichlet, 314 阅读, 收藏, 编辑
摘要:
0. 异常的优点 a. 有堆栈信息,利于定位程序故障。 b. 程序显得整洁,是的正常的业务逻辑和异常处理分开。返回值形式会容易出现层层迭代,返回值检查和正常逻辑混在一起。 c. 异常处理部分可以用于确保资源的释放。Finally, Close 1. 抛出异常 设计一个对外的接口,怎么抛出以及什么时候 阅读全文
COM线程单元
2017-06-04 17:03 by Dirichlet, 312 阅读, 收藏, 编辑
摘要:
节选自C#高级编程 不管是单线程单元还是多线程单元,一个线程只能属于一个单元。 1) 单线程单元(apartment, 寓所,套间) 单线程单元与它拥有的线程是一对一的关系。COM对象在编写时不是线程安全的,也就是说编写COM对象时可以不考虑线程安全,COM库通过消息处理机制帮助实现线程同步。 2) 阅读全文
.Net中多线程类的使用和总结
2017-06-04 17:03 by Dirichlet, 928 阅读, 收藏, 编辑
摘要:
lock, Monitor, Thread, Join, BackGroundWorker. 消费者和生产者。Async 委托Invoke TypeHandle中BlockIndex。 http://msdn.microsoft.com/zh-cn/library/ms173179(v=vs.80) 阅读全文
避免构造/析构函数调用虚函数(转)
2017-06-04 17:02 by Dirichlet, 389 阅读, 收藏, 编辑
摘要:
转自http://hi.baidu.com/richiechyi/item/0f0fe3391443e389f5e4ad91 不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C+ 阅读全文
单例模式完整解析
2017-06-04 17:02 by Dirichlet, 263 阅读, 收藏, 编辑
摘要:
volatile, static readonly, double check 直到对象要求产生一个实例才执行实例化;这种方法称为"懒实例化"。懒实例化避免了在应用程序启动时实例化不必要的 singleton。 1. 但是,这种实现的主要缺点是在多线程环境下它是不安全的。如果执行过程的不同线程同时进 阅读全文
正则表达式
2017-06-04 17:00 by Dirichlet, 211 阅读, 收藏, 编辑
摘要:
用途: 1. 判断给定的整个字符串是否满足某pattern。//Regex.IsMatch 2. 在给定的整个字符串中找出满足某pattern的所有字串。给定字符串里是否存在某字串满足某pattern。//Regex.Matchs,Regex.IsMatch 上述pattern就是正则表达式。 任何 阅读全文
序列化与反序列化
2017-06-04 16:59 by Dirichlet, 304 阅读, 收藏, 编辑
摘要:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; using System.Gl 阅读全文
object.Equals与object.ReferenceEquals方法
2017-06-04 16:58 by Dirichlet, 624 阅读, 收藏, 编辑
摘要:
object.Equals方法表达的是语义判等,不一定是引用判等。 object.ReferenceEquals方法是肯定是引用判等。 怎么实现一个对象的值语义的 Equals方法?实验。 MyClass bool Equals(MyClass other) { // 1. other==null? 阅读全文
数组的使用,指针的使用
2017-06-04 16:58 by Dirichlet, 239 阅读, 收藏, 编辑
摘要:
数组的使用,指针的使用 http://msdn.microsoft.com/zh-cn/library/k2604h5s(v=vs.80).aspx 阅读全文
CLR内存回收机制
2017-06-04 16:57 by Dirichlet, 292 阅读, 收藏, 编辑
摘要:
代龄机制。 通过递归构建可达对象图,不可达的对象会被回收,然后CLR会矫正对象指针。 对于终止化/Finalize对象, 一开始时这些对象指针/根/引用会被放到终止化链表中,当CLR垃圾收集开始时,那些被判定为可回收的终止化对象从终止化链表移到终止化可达队列中,有一个CLR专有线程会在这些对象执行F 阅读全文
Dispose模式释放非托管资源
2017-06-04 16:57 by Dirichlet, 306 阅读, 收藏, 编辑
摘要:
实现方式用的是设计模式里的模板模式,基类先搭好框架,子类重写void Dispose(bool disposing) 即可。 需要注意的是基类的Finalize函数也就是析构函数调用的是虚函数void Dispose(bool disposing);而子类如果重写了这个虚函数,当析构子类对象时会调用 阅读全文
装箱与拆箱
2017-06-04 16:57 by Dirichlet, 151 阅读, 收藏, 编辑
摘要:
boxing, unboxing. 装箱,值对象到引用对象的转换,会在堆上分配空间,栈到堆的拷贝,返回新的对象地址。 拆箱,获取装箱对象的的部分字段地址,然后从托管堆到线程堆栈进行拷贝。 拆箱需要判断运行时类型信息。 装箱有内存分配,还有额外内存syncblockIndex和typehandle指针 阅读全文
.net 字符串驻留
2017-06-04 16:56 by Dirichlet, 213 阅读, 收藏, 编辑
摘要:
.net中的string表达的是常量字符串。 JIT编译器编译时判断遇到的常量字符串是否在内部散列表中,如果不在,添加进去。当第一次执行到含字符串的方法时,CLR会检查该字符串是否在内部的一个散列表中,这个散列表的key是字符串,value是字符串的引用,如果不在就增加一个对该字符串的条目进去,如果 阅读全文
COM线程模型 套间概念
2017-06-04 16:53 by Dirichlet, 447 阅读, 收藏, 编辑
摘要:
COM线程模型 套间概念 1) 单线程套间。线程是COM主线程,初始化COM库的进程的第一个线程。即使从其他线程访问COM组件,也不需要手工同步,COM库已经实现了同步。寓所线程里有个消息处理循环来处理对COM组件的访问。 2) 单线程套间。线程是不一定是COM主线程。同步机制同上。 3)多线程寓所 阅读全文
Smart pointer 智能指针小总结
2017-06-04 16:52 by Dirichlet, 292 阅读, 收藏, 编辑
摘要:
Smart pointer line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数。如果继续用指针访问,会出现如下图的内存访问异常。所以说如果选择了用智能指针,就不要再试图用其他方式再去访问对象了。 阅读全文
元数据,反射,特定属性
2017-06-04 16:50 by Dirichlet, 250 阅读, 收藏, 编辑
摘要:
元数据就是一大推表,类型定义表,字段定义表,方法定义表,属性定义表,特制属性表(Custom Attribute). 元数据是.Net Framework 的一个重要基石,反射、特制属性,就是基于元数据的, 当然特制属性是反射的一个应用。 反射其他应用? 反射主要用于FCL的类库中来提供用户更多的功 阅读全文
反射 元数据
2017-06-04 16:49 by Dirichlet, 380 阅读, 收藏, 编辑
摘要:
C#里的智能感知分成两种,对于当前工程内容的智能提示,这个和C++一样,是通过代码分析出来的,比较复杂。因为这个时候程序还没有编译,没有assembly可以获得。对于引用dll里内容的智能提示,是通过反射实现的,相对简单一点,C++因为没有反射是做不到的。 metadata(元数据):是一系列的特殊 阅读全文