博文

C#接口实现的继承和重载机制(2008-08-19 15:24:00)

摘要:由于本文最近在学习C#当中的接口实现的继承机制和接口的重实现方法,看到曾洪宁的博客上这篇文章对刚入门C#的人比较有用,在这里转载,同时也谢谢曾洪宁同学。 转载地址: http://blog.csdn.net/Knight94/archive/2006/11/04/1366375.aspx   众所周知,在一个类中对接口所定义方法的实现,默认是不会加上“virtual”关键字的。 一般的形式如下。     interface IMsg     {         void Message();     }       public class MyClass:IMsg     {         #region IMsg Members         public void Message()         {             // TODO:  Add MyClass.Message implementation             Debug.WriteLine( "MyClass" );         }         #endregion       }   因此,那么如果一个类型继承了实现接口的类型,默认的情况下是无法重载接口所定义的方法。......

阅读全文(7409) | 评论:0

Readonly 和 const区分(2008-08-11 16:31:00)

摘要:  const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。


  readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。


readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。
   readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
   readonly可以是任何类型

* 需要注意的一个问题是: 对于一个 readonly 的 Reference 类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。

public static readonly Class1 my = new Class1();

my.SomeProperty = 10; //正常
my = new Class1(); //出错,该对象是只读的

但是,如果上例中的 Class1 不是一个 Class 而是一个 struct,那么后面的两个语句就都会出错。

static readonly:

Java 中 static 是当载入一个类时执行一次的。

C#中是怎么执行的,我没有查到。很奇怪几乎每本java的书都会说static的问题,C#的往......

阅读全文(2187) | 评论:0

UTF-8、Unicode、GB2312之间转换(2008-07-25 15:49:00)

摘要:首先声明,这是一篇转载文章,转载自许伟群先生的文章。个人觉得这篇文章写 的比较周到。 http://blog.csdn.net/xuweiqun/archive/2006/11/07/1370420.aspx 文章如下: 特搜集了UTF-8,UNICODE,Gb2312他们3个之间的相互转换. UTF-8:   1~3字节可变 UNICODE: 2字节一个字符 GB2312:  1字节一个字符 例子: “你”字的UTF-8编码: E4 BD A0        11100100 10111101 10100000 “你”的Unicode编码: 4F 60            01001111 01100000 按照UTF-8的编码规则,分解如下:xxxx0100 xx111101 xx100000 把除了x之外的数字拼接在一起,就变成“你”的Unicode编码了。 注意UTF-8的最前面3个1,表示整个UTF-8串是由3个字节构成的。 经过UTF-8编码之后,再也不会出现敏感字符了,因为最高位始终为1。 类定义      class CChineseCode      {         public:             static void UTF_8ToUnicode(wchar_t* pOut,char *pText);  // 把UTF-8转换成Unicode             static void UnicodeToUTF_8(char* pOut,wchar_t* pText);  //Unicode 转换成UTF-8&......

阅读全文(4140) | 评论:0

关于中日文和UNICODE之间编码的转换(2008-07-25 15:05:00)

摘要:最近一段做一些关于文字编码方面的东西,常常涉及到各种编码字符之间的转换。主要是做中日文方面的,包括中文gb2312, 日文JIS, SHIFT-JIS,以及他们和Unnicode码之间的转换。 一 GBK <==> Unicode unsigned short GBK2UNI(unsigned short usGBK)
{
    unsigned char  szEUC[2] = { usGBK >> 8, usGBK & 0xFF };
    unsigned short usUNI;
    MultiByteToWideChar(       
        936,
        0,
        (LPCSTR)szEUC, 
        2,
        &usUNI,    
        1
    );
    return usUNI;  
} unsigned short UNI2GBK(unsigned short usUNI)
{
    unsigned char  szGBK[3]={0};
    unsigned short wzUNI[2] = { usUNI, 0 };
&......

阅读全文(5441) | 评论:0

乌镇风光(2008-06-26 17:28:00)

摘要:


由于和交大网络学院有项目合作关系,前段时间,一起在乌镇开了个会,顺便在乌镇转了转。看了看这个号称江南三大古镇的风景。个人认为,乌镇比上海周庄以及桐乡更让人舒服点,比上面两个地方更宁静,商业气氛更小,是个修身养性的好地方。乌镇的主要景点分东栅和西栅两个地方,东栅的景点多,商业气氛小,去的人也更多,一般去乌镇的人都是在东栅住,只是抽时间去 西栅玩,西栅的风景点不多,且商业气氛浓,在西栅,主要是当年刘若英和黄磊拍过《似水年华》而有名,在东栅,主要景点有:沈雁冰纪念堂,三寸金莲馆,大染坊等。不过,一般乌镇适合周末去,一天至两天比较合适,从外地去,两天较合适,本地的一天比较合适。 好了,废话少说,现发几张照片,与大家分享分享。   1. 乌镇拱桥
2.初到乌镇
3. 夕霞西照   4. 九曲桥   5. 传统酱油制造 ......

阅读全文(2765) | 评论:0

VC程序在没装VC的机器中运行(2008-06-26 16:01:00)

摘要:由于工作需要,经常需要演示。我们是一个专门搞研究开发的公司,主要是利用C和C++做开发。一些研究成果需要经常演示给总部的人看。演示的时候一般都是带一台笔记本去,而这笔记本一般是没有装过VC,也没有装VS.net的,而在演示的时候,我们有些程序是用VC6.0,有些程序是VS.NET2003, 有些程序还是用VS.net 2005做的。这里就总结一下用C和C++开发的程序如何在没有装VC的机器里运行。 一 VC 6.0和VS.NET 2003的程序 对于VC 6.0和VS.NET 2003编写的程序,需要调用的DLL主要有三个,对于VC6.0来说,只要将以下三个DLL拷到exe文件同目录下,则exe则可以在没装VC6.0的机器中运行. MFC42D.DLL MFCO42D.DLL MSVCRTD.DLL 这是对Debug程序,对一般程序,应该是 MFC42.DLL MFCO42.DLL MSVCRT.DLL 对于用VS.NET 2003编写的程序,也分Debug和一般的 分别是: Debug: mfc71d.dll          msvcp71d.dll            msvcr71d.dll 一般: mfc71.dll             msvcp71.dll              msvcr71.dll 只要将这三个DLL加入到工程的目录中,在没装VS.NET 2003的机器中也能运行EXE文件。   二  VS.NET 2005写的程序 对于VS.NET 2005写的程序,和前面两种情况有点区别。这是因为VS.NET 2005下处理DLL的方式和前面的两种方式不一样。大致原因是,在VS.NET 2005下,像前面两种情况下的DLL都被做到一个.......

阅读全文(5029) | 评论:2

C语言头文件中定义变量问题(2008-06-19 11:26:00)

摘要:上个星期回学校的时候,刚好碰到一个学弟在写程序,并且刚好碰到一个总编不过去的问题,我看了看,正好是个头文件重复包含问题,问题描述如下: 他在程序中建立了一个global.h的文件,代码如下: #ifndef _GLOBAL_H_ #define _GLOBAL_H_ int a; int b; int c; 然后在其他文件代码中,有多个.cpp文件引用他,编译的时候编译器报变量重复定义。   其实这是个C语言的基本问题,如果学过编译原理的人就很清除问题在哪里。假设上面的头文件global.h,有三个.cpp文件,1.cpp, 2.cpp, 3.cpp都包含了这个头文件。那么在编译的时候分别生成 1.obj, 2.obj, 3.obj。在这三个obj文件中都包含变量a, b, c。那么在链接的时候你让机器怎么去分别三个a变量,三个b变量,三个c变量,那么就只好给你报个错了。   不过,如果是从事Linux或者以前标准C语言开发的人可能会想,我原来编程就是这么编的,怎么就没有报错。对的,有些编译器是具有这种重定义自动检测的,如Linux下C编程。我目前用的编程环境是Visual studio.net 2003。我写了两个小程序测试了一下,一个是标准C程序,如下: head1.h #ifndef _HEADER1_H_
#define _HEADER1_H_ void print_1(); #endif head2.h #ifndef _HEADER2_H_
#define _HEADER2_H_ void print_2(); #endif global.h #ifndef _GLOBAL_H_
#define _GLOBAL_H_ int g_test; #endif   head1.c void print_1()
{
 g_test=1;
 printf("%d\n",g_test);
}   head2.c void print_2()
{
 g_test=2;
 printf("%d\n",g_test);
} main.c void main()
......

阅读全文(13325) | 评论:2

GB18030中关于CJK的B扩展区的汉字显示和编码(2008-06-02 17:32:00)

摘要:    这段时间,一直在搞和GB18030有关的东西,第一个东西只需要显示GB18030的双字节和CJK中A扩展区的汉字,这个问题搞了一段时间后,终于有了结果。具体参见我Blog中的另外一篇文章。     最近,另外一个东西需要显示和对GB18030的CJK B扩展区的汉字显示和操作。发现前面的方法突然没办法解决这个问题,于是我上Google,上baidu。最后还是没搞定,后来又问同事,但是没几个人会搞这玩意。直到某一天,我又打开CJK B扩展区的码来看,突然不知道哪来的开了天眼,发现每个CJK B扩展区的汉字编码旁边还有一个UTF-16的两字节编码。如下所示: 汉字         GB18030         Unicode       UTF-16 𠀅             95328331         20005          D840DC05   于是我就想,总该不好显示Unicode码的,因为它是两个半字节,根本无法显示。于是我看UTF-16刚好是两个Unicode字节,我就死马当活马医,把这两个字节分别赋给一个Unicode数组,然后再显示这个Unicode数组。我就按照x86的小尾字节存放方式把它存放如下如下: w_char_t  ch[3]; ch[0]=0xDC05; ch[1]=0xD840; ch[2]=0; ExtTextOutW(pDC->GetSafeHdc(),0,0,ETO_OPAQUE,lprc,ch,2,NULL); 结果令我失望,还是不能显示,于是又陷入了迷茫之中................

阅读全文(5054) | 评论:0

GB18030编码的显示及其与Unicode码的互相转换(2008-05-29 11:34:00)

摘要:前段时间在搞一个GB18030字体相关的项目,发现其中的猫腻还不少,现将这段时间的心得体会以及相关收获与大家分享。 一 GB18030的显示 目前,Windows系统还不支持四字节编码的文字显示,针对中文GB18030四字节编码,Windows系统特别推出了一个GB18030包,下载地址为: http://www.microsoft.com/china/windows2000/downloads/18030.mspx 在开发包中,主要包括以下四个东西,只要安装了以后就自动会有的,前两个在C盘的Windows下,后两个在C盘 Program Files文件夹下。 ·         字体文件 SimSun18030.ttc ·         代码页支持文件 c_g18030.dll ·         转换工具gbunicnv.exe ·         微软4字节字符集编码支持包ms4bsp.dll 装好后,修改注册表信息,找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink],然后在
 “Tahoma” 和 “SimSun”加入SimSun18030.ttc,SimSun-18030。 一切搞定后,重启机器,这样系统就支持GB18030的显示了。 为了方便大家学习,现将参考代码显示在下面: void CMy4ByteCodeDlg::OnBnClickedOk() {        CByte4Code* pByte4Code = new CByte4Code();        char*      ......

阅读全文(14866) | 评论:13

ICTCLA分词中地名角色分析(2008-05-12 17:24:00)

摘要:之前,看到网上很多的朋友研究ICTCLA分词系统。对于未登录词识别一块,网上的例子都是人名识别,对地名识别中,词典中的9个角色分别代表什么,今天下午我研究了一下,现公布如下,如有不当,欢迎大家提出意见修改。 0         非地名字/词 1         地名起始字/词 2         地名中间字/词 3         地名结尾字/词 11       地名前端字/词 12       地名后续字/词 13      两个地名的连接字/词 100     始##始 101     末##末......

阅读全文(3291) | 评论:0