(转)C# const和static readonly区别
摘要:我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:1. static readonly MyClass myins = new MyClass();2. static readonly MyClass myins = null;3.
阅读全文
(转)C#单例模式详解
摘要:关于单例模式的一些要点:Singleton模式中的实例构造器可以设置为protected以允许子类派生。 Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。 Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。 Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。 多线程的Singleton模式view plaincopy to clipboardprint?p
阅读全文
(转)C# 中的 Volatile 关键字 .
摘要:Volatile字面的意思时易变的,不稳定的。在C#中也差不多可以这样理解。编译器在优化代码时,可能会把经常用到的代码存在Cache里面,然后下一次调用就直接读取Cache而不是内存,这样就大大提高了效率。但是问题也随之而来了。在多线程程序中,如果把一个变量放入Cache后,又有其他线程改变了变量的值,那么本线程是无法知道这个变化的。它可能会直接读Cache里的数据。但是很不幸,Cache里的数据已经过期了,读出来的是不合时宜的脏数据。这时就会出现bug。用Volatile声明变量可以解决这个问题。用Volatile声明的变量就相当于告诉编译器,我不要把这个变量写Cache,因为这个变量是可能
阅读全文
(转)Invoke and BeginInvoke
摘要:Invoke and BeginInvoke在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法。 一、为什么Control类提供了Invoke和BeginInvoke机制?关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。1、windows程序消息机制Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。 Windows GUI程序的消息循环 Windows程序有个消息队列,窗体
阅读全文
(转)Invoke 和 BeginInvoke 的真正涵义
摘要:BeginInvoke 方法真的是新开一个线程进行异步调用吗?参考以下代码:public delegate void treeinvoke();private void UpdateTreeView(){ MessageBox.Show(System.Threading.Thread.CurrentThread.Name);}private void button1_Click(object sender, System.EventArgs e){ System.Threading.Thread.CurrentThread.Name = "UIThread"; treeVi
阅读全文
(转)C#线程:BeginInvoke和EndInvoke方法
摘要:开发语言:C#3.0IDE:Visual Studio 2008一、C#线程概述在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提供程序的性能,将要执行的任务分解成多个子任务执行。这就需要在同一个进程中开启多个线程。我们使用C#编写一个应用程序(控制台或桌面程序都可以),然后运行这个程序,并打开windows任务管理器,这时我们就会看到这个应用程序中所含有的线程数,如下图所示。如果任务管理器没有“线程数”列,可以【查看】>【选择列】来显示“线程计数”列。从上图可以看出,几乎所有的进程都拥有两个以上的线程。从而可以看出,线程是提供应用程序
阅读全文
(转)泛型委托在项目中的应用
摘要:感悟:对泛型委托基本属于有点认识,但从来没真正在项目中使用过,有时感觉没有合适的场景应用,但看了artech兄的文章,我才明白,原来泛型委托真的可以做很多事情,而且效果往往是没有使用委托所达不到的。Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值。可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托。该方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能返回值。当然泛型委托不只是只能支持一个参数,它最多可以支持四个参数。 泛型委托与直接显示声明自定义委托的示例比较: 1:显示声明自定义委托:代码 C
阅读全文
PD的CDM模型中的三种实体关系
摘要:PD的CDM模型中的三种实体关系CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高层的抽象。CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素:实体型,属性和联系。其中实体型对应到CDM中的Entity,属性对应到CDM中每个Entity的Attribute,在概念上基本上是一一对应的。但在联系上,CDM有了比较大的扩展,除了保留ER图原有的RelationShip概念之外,还增加了Association,Inheritance两种实体关系,下面就让我们分别看看这些关系的用法和之间的区别(下图中被标红的工具栏按钮就是用来向实体中添加这些关系的)。另外,在介绍所有
阅读全文
c# equals与==的区别(转载)
摘要:对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。 ==操作比较的是两个变量的值是否相等。 equals()方法比较的是两个对象的内容是否一致.equals也就是比较引用类型是否是对同一个对象的引用。 对于值类型的比较,这里就不做描述了,下面讨论引用类型的比较:首先我们看一段程序usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSyste
阅读全文
为什么父类指针可以指向子类反之则不行(转载)
摘要:例如: class a {public: int aa}; class b:public a {public: int bb; } 从内存的来看 如a ---------| |占一个int数据大小--| |----(aa数据)------| |--------- 而b则是 ---------|--------- |占一个int数据大小--|占一个Int数据大小--| |从a中继承而来------|---(bb数据----------| |------------------ 当定义一个基类类型的指针时 a *p;这时,这个指针指向的是a类型的数据 当p指针指向派生类的时候,因为p是a类型的指针
阅读全文
理解Linq和lambda
摘要:******************理解Linq和lambda***********************using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LinqYL{ public delegate bool Func2<T>(T t); public static class Enumerable { public static IEnumerable<T> Where2<T>(this IEnumerable<
阅读全文