C#语法相比其它语言比较独特的地方(一)

由于c#是由设计.net本身的人设计出来的,所以c#才是.net上最一流的语言。
实际上,已经有一百多万行c#代码用于实现.Net class framework。
要发挥出.net平台全部的效能,只有c#才是首选。

1,switch语句可以用来测试string型的对象
这在c,c++,java等其他各主流语言中都是不可以的,唯独c#可以。
例如string a="haha";

代码如下:

switch(a)
{
    case "dfj":
     ...
    break;
    case "djkfdjkf":
    ....
    break;
    case "haha":
     .....
    break;
    default:
    ....
}

2、多维数组

这也是c#的特色,像java也没有多维数组,只有数组的数组。
c#中不但有数组的数组,也有多维数组。
数组的数组的特点是(拿二维为例),每一行的元素个数可以不同。
比如int [][] c=new int[2][];

代码如下:

c[0]={3,4,5,6};
c[1]={1};

c#中的多维数组的形式是这样定义

代码如下:

int [,] c=new int[3,4];

这样的c就是一个三行四列的二维数组。

3,as与is

java中也有类似于is的语法,用于在运行时判断一个对象的类型,叫做instanceof。
c#中就是一个is,判断o是不是一个string:   o is string
as则是一个很窝心的功能,它首先对这个对象进行判断是否是某种类型,如果是就进行类
型转换,如果不是,就返回null。
  如:   o as string

4,foreach语句

java5以后for语句就多了foreach功能,这也许就是因为之前没有,而c#有,使得自己非常嫉妒,所以马上给添上了。

c#中的foreach功能是非常方便的。

例如遍历一个数组

代码如下:

string[] sentences=...;
foreach(string st in sentences)
{
  ....
}

5,索引器和Property

不得不承认,我的偶像Anders实现出来的c#确实非常优秀。
我把索引器和Property归为一类。
都是从Class中读取某种属性,如果知道java的POJO的人肯定知道,java bean的标准形式
就是一堆private属性,然后一个getter,一个setter,这是标准,但实现确实使用的普通成员方法。

c#则更绝,它直接在Class中声明一个单独的field,然后在语法中直接设计了getter和setter的简化写法,这就是我们熟知的Property。
如:

代码如下:

public class WordCount
{
  private string m_string;
  public string OutFile
  {
     get{...}
     set{...value...}
  }
}

这样真正做到了封闭改动,开放扩展。
然后就是索引器,我觉得java中只有EL才有点做出了类似索引器的功能,这也只是方便了写jsp的人,而且很多厂商居然不在自己的容器中包含EL解析,这不得不让sun很无奈。

索引器就是给几个参数,返回一个属性。
如:

代码如下:

public int this[string index]
{
  get{...}
  set{..value}
}
public int this[int x,int y]
{
  get{}
  set{..value}
}

6,const和readonly

这点c#让我有点失望,对于非Ref型就是const,对于Ref型就是readonly。
而在java中,一个final就行了。当然对于不可继承的类,c#又有一个关键字sealed,虽然这让程序的含义更明确,但确实也多记了好几个关键字。

7,delegate型别

说实话,这种奇怪的语法还是第一次见到,说跟C++中重载operator()的功能像吧,又不是太像。
总而言之,觉得它实现可能就是记下一堆同类型的函数指针,然后可以依次调用而已。
首先需要声明一个delegate型别,注意是型别而不是对象。
如public delegate void Action();
注意既然是型别,那就跟enum,class是同等的,注意型别能够出现的位置。
然后我们就可以定义这种型别的对象来使用了。

代码如下:

Action aaa=new Action(...);

这个...代表的是符合这种函数原形的函数名字,注意使用delegate机制来调用,和直接调用函数本质上没有什么不同,就是说,当你调用成员函数的时候,当然你需要有一个对象,而调用静态函数的时候,你可以直接使用类名了。

这种delegate型别对象还有点特殊,它可以使用运算符+=和-=来增加或者减少本对象所代
理的函数集,当然还有更多的方法用来看当前我代理了多少个函数之类的。

代码如下:

aaa+=new Action(xxx);
aaa+=new Action(ooo);

然后aaa(),意味着顺序调用xxx和ooo。
aaa.GetInvocationList().length可以看到当前代理了多少个函数。
你不用担心代理的普通成员函数的所属对象会被垃圾回收器回收,直到此代理对象不再引用这个函数,当然这个也是坏消息,说不定你都忘了还有某个代理对象代理着要死的对象的函数,让这个对象老不死。

(0)

相关推荐

  • C#语法相比其它语言比较独特的地方(二)

    之前有个兄弟给我的卷一re了帖子,我当时没有g,m,直到他把它删掉才后悔莫及,人生最痛苦的事情莫过于此...... 好,即便如此,我们还是满怀希望的向前奔去.接着写卷二. 还要提一下,上次最后说到的delegate,在我了解了它的实现和用途以及看到我的偶像的一些访问记录后,我对它有了很深的理解,并且在事件处理机制上,我更偏向于我偶像这边,有兄弟说MFC是switch,java是listener,其实java这些listener在processEvent里面还不是一个个switch然后调用,都是s

  • C#语法相比其它语言比较独特的地方(三)

    1.在C++中允许从一个case贯穿到另一个case标签 比如: 复制代码 代码如下: int a =1; switch(a) {   case 1:      some statements;   case 2;      other statements;      break; } 第一个case和第二个case之间可以没有break 而在C#中这个break不能省略. 3.as和is只会检测待转化类型的类型,而不会进行其它操作,所以只有当转化类型是目标类型或者目标类型的子类(当然如果目标

  • C#语法相比其它语言比较独特的地方(一)

    由于c#是由设计.net本身的人设计出来的,所以c#才是.net上最一流的语言. 实际上,已经有一百多万行c#代码用于实现.Net class framework. 要发挥出.net平台全部的效能,只有c#才是首选. 1,switch语句可以用来测试string型的对象 这在c,c++,java等其他各主流语言中都是不可以的,唯独c#可以. 例如string a="haha"; 复制代码 代码如下: switch(a) {     case "dfj":     

  • Lua脚本语言基本语法快速入门教程

    Lua语法与C语言有些相似也不太一样,写了语句学一下 微笑 --begin a = --[[explain]] "ha"; print(a) if a == "ha" then print("if test passed") else print("if used wrong") end b,c=2,3 print(b,c) b,c=c,b if b==3 and c==2 then print("swap test

  • 创业如何选择WEB开发语言

    在打算开发一个网站时,选择什么语言,是首先需要面对的问题.目前主流的WEB开发语言有ASP.NET.PHP.JSP; 作为MS上世纪老将ASP,就不再提及,如果是因为维护方面的原因而必须使用,可考虑升级到ASP.NET,而作为新开发一个语言,实在找不到理由再使用它了; 以下将对这三种语言做对比,以供权衡: 上手度 .NET: 5分 PHP:3分 JSP:1分 如果你是一个WEB方面的新手,这三门WEB语言的学习成本差别很大.ASP.net 作为微软的产品,继承了其一贯的特点,方便上手,易用;甚至

  • Python程序设计入门(1)基本语法简介

    Python是当今日趋流行的一种脚本语言,它比Java更简单,比php更强大,并且还适用于做桌面应用的开发,在ubuntu中,更加是必须的一种脚本引擎,所以有必要去学习一下,这里的文章只针对有一定编程基础,最好是比较熟悉php或javascript的用户,如果没任何基础的新手建议找更详细的教程去学习. Python的变量是不需要定义的,这方面和php一样,它比javascript还是宽松,不过它是用缩进作为段落标识的,作为习惯了C语言风格语法的人,可能一开始会很不习惯使用,但细一想,其实也是很正

  • python语言是免费还是收费的?

    python是免费的么? python是免费的,也就是开源的.编程软件的盈利方式就是你使用它, 用的人越多越值钱. 注:Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构. Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个 Python

  • golang的基础语法和常用开发工具详解

    golang的基础语法 golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有其他语言的语法基础,那么我们学习golang将更容易上手.那我们直接开始介绍golang的语法吧. 注释 注释分单行注释和多行注释.golang的注释和其他的开发语言的注释是一样的.双斜杠表示单行注释,/**/表示多行注释. // 单行注释这么开头 /* 多行注释 */ 定义包名 一般来说,使用开发工具的时候,包名是不需要手动输入的,开

  • Python入门之基础语法详解

    一.我的经历及目标 在学习python之前:我学习过C/C++,在学校期间做过很多的项目,已经有两年多了,算是对C/C++非常的熟悉了,精通不敢说,但是对于面向过程和面向对象有很深刻的认识,做过很多的开发,学习数据库,MFC, QT, linux下利用C/C++进行服务器的开发,QT环境下进行模拟QQ的开发- 听说python挺火的,我也来尝试一门新的语言,python和c有80%的相似性,毕竟是用C来开发的语言,但是是面向过程的一门语言,有C++的继承等相似的特性,感觉更有信心学会它了,毕竟可

  • C语言预编译#define(预处理)

    目录 一.预定义符号 二.#define 定义标识符 三.#define 定义宏 四.#define 替换规则: 五.#和## 两个符号(少见) 六.宏和函数的对比 七.#undef 一.预定义符号 预定义符号是系统本身定义的: FILE 进行编译的源文件的位置 LINE 文件当前的行号 DATE 文件被编译的日期 TIME 文件被编译的时间 STDC 如果编译器遵循 ASNSI C,其值为1,否者未定义 二.#define 定义标识符 语法:#define name stuff (用stuff

随机推荐