博文
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
}
因此,那么如果一个类型继承了实现接口的类型,默认的情况下是无法重载接口所定义的方法。......
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#的往......
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&......
关于中日文和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 };
&......
乌镇风光(2008-06-26 17:28:00)
摘要:
由于和交大网络学院有项目合作关系,前段时间,一起在乌镇开了个会,顺便在乌镇转了转。看了看这个号称江南三大古镇的风景。个人认为,乌镇比上海周庄以及桐乡更让人舒服点,比上面两个地方更宁静,商业气氛更小,是个修身养性的好地方。乌镇的主要景点分东栅和西栅两个地方,东栅的景点多,商业气氛小,去的人也更多,一般去乌镇的人都是在东栅住,只是抽时间去 西栅玩,西栅的风景点不多,且商业气氛浓,在西栅,主要是当年刘若英和黄磊拍过《似水年华》而有名,在东栅,主要景点有:沈雁冰纪念堂,三寸金莲馆,大染坊等。不过,一般乌镇适合周末去,一天至两天比较合适,从外地去,两天较合适,本地的一天比较合适。
好了,废话少说,现发几张照片,与大家分享分享。
1. 乌镇拱桥
2.初到乌镇
3. 夕霞西照
4. 九曲桥
5. 传统酱油制造
......
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都被做到一个.......
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()
......
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);
结果令我失望,还是不能显示,于是又陷入了迷茫之中................
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*  ......
ICTCLA分词中地名角色分析(2008-05-12 17:24:00)
摘要:之前,看到网上很多的朋友研究ICTCLA分词系统。对于未登录词识别一块,网上的例子都是人名识别,对地名识别中,词典中的9个角色分别代表什么,今天下午我研究了一下,现公布如下,如有不当,欢迎大家提出意见修改。
0 非地名字/词
1 地名起始字/词
2 地名中间字/词
3 地名结尾字/词
11 地名前端字/词
12 地名后续字/词
13 两个地名的连接字/词
100 始##始
101 末##末......