C#独有的特点   C#最引人入胜的地方是它和Java的不同,而不是相似的地方。这一节(和这个系列第二部分的大部分地方)讲述了C#实现的和Java不同的地方或者Java根本没有的特点。   中间代码:微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地。微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--如果不是大多数的话--程序员认为Java程序要不可避免的比C编写的任何东西都要慢。而这种实现方式决定了基于MSIL的程序(指的是用C#,Visual Basic,"Managed C++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是Java JIT编译器的普遍存在使得Java和C#在性能上相对相同。象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码。   命名空间中的申明:当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类。同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体。必须使用using关键字来引用其他命名空间的内容。   基本的数据类型:C#拥有比C,C++或者Java更广泛的数据类型。这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一样,所有这些类型都有一个固定的大小。又象C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符。C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字。   两个基本类:一个名叫object的类是所有其他类的基类。而一个名叫string的类也象object一样是这个语言的一部分。作为语言的一部分存在意味着编译器有可能使用它--无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它。   参数传递:方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递。ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值。out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值。   与COM的集成:C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术。实际上,最终有可能在任何.NET语言里编写COM客户和服务器端。C#编写的类可以子类化一个以存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说,JScript语言子类化它从而得到第三个COM组件。这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化。   索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的。 public class ListBox: Control {
private string[] items;
public string this[int index] {
get {
return items[index];
}
set {
items[index] = value;
Repaint();
}
}
}    可以用一个循环器来匿名引用字符串内部数组成员,就象下面这样:ListBox listBox = ...;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);    代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了。代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用。一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中

解决方案 »

  1.   

    http://www.yesky.com/20020729/1622561_2.shtml
      

  2.   

    to Ajworld(packer):
    上面的文章自是简单的提了一下,
    好像并不能解决什么问题阿。
    请详细的解释一下好吗?
      

  3.   

    比方你要引用某个COM组件名为xxx.dll
    你可以在类中使用xxx.function(.....)
    xxx x=new xxx();
      

  4.   

    C#可以实现.我这个人很懒啊,从来不正面回答信誉<100的问题. 自己想办法吧.或者你在换一个Login,我给你贴code.还有,不要问这么泛泛的问题,具体些好.Is overkill always good ?
      

  5.   

    to bugfree(八个非非):
    你这是什么意思,你以为你很牛吗?
    来这里教训起人来了,你不想回答就不要在这里回贴,
    我也不希罕你的答案,谁知道你是不是真的知道。你难道不会提问题吗?如果人家在你的帖子里这样说:
    ‘我这个人很懒啊,从来不正面回答小于三颗▲的问题。’
    你心里是什么滋味?再说了,我也不知道我的信誉分是怎么扣掉的。
      

  6.   

    我这个人很懒啊,从来不正面回答小于三颗▲的问题.我就会感觉那个人确实比较懒啊.如果你是说我,无所谓啊,我从来不问问题,除了玩玩之外.我今天也例外的回答了一个信誉95的帖子,开头也这么写的,不知道有什么不对的.我们交流的很好啊.还成朋友了.http://www.csdn.net/expert/topic/1085/1085111.xml?temp=.1764948我给你发帖子是看到好多人没有解决,才好心好意的说得,平常都不会帖子.谢谢你批评我,我这个人就缺这个,平时没人说.
      

  7.   

    好象在C#中实现子类化,消息的处理封装在MESSAGE 类里,不用使用什么HOOK API,但是事件常量要自己定义,如果你要源代码的话,我这里有一个,给我你的
    EMAI
      

  8.   

    另外我告诉你,要找答案最好到外国网站去,在CSDN 里真正能解决问题的很少,很多人爱捣乱,我很少来上WWW。CSDN。NET,比如:http://www.csharp-corner.com/ 很多国内根本没有的原代码
      

  9.   

    多谢killertang(寒羽良-再生)
    我的Email是[email protected],您知道国外的C#论坛有哪些吗?
    可惜我的E文实在不好。