当前位置: 首页 > 编程笔记 >

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

魏熠彤
2023-03-14
本文向大家介绍C#语法相比其它语言比较独特的地方(一),包括了C#语法相比其它语言比较独特的地方(一)的使用技巧和注意事项,需要的朋友参考一下

由于c#是由设计.net本身的人设计出来的,所以c#才是.net上最一流的语言。
实际上,已经有一百多万行c#html" target="_blank">代码用于实现.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可以看到当前代理了多少个函数。
你不用担心代理的普通成员函数的所属对象会被垃圾回收器回收,直到此代理对象不再引用这个函数,当然这个也是坏消息,说不定你都忘了还有某个代理对象代理着要死的对象的函数,让这个对象老不死。

 类似资料:
  • 本文向大家介绍C#语法相比其它语言比较独特的地方(三),包括了C#语法相比其它语言比较独特的地方(三)的使用技巧和注意事项,需要的朋友参考一下 1.在C++中允许从一个case贯穿到另一个case标签 比如: 第一个case和第二个case之间可以没有break 而在C#中这个break不能省略. 3.as和is只会检测待转化类型的类型,而不会进行其它操作,所以只有当转化类型是目标类型或者目标类型

  • 本文向大家介绍C#语法相比其它语言比较独特的地方(二),包括了C#语法相比其它语言比较独特的地方(二)的使用技巧和注意事项,需要的朋友参考一下 之前有个兄弟给我的卷一re了帖子,我当时没有g,m,直到他把它删掉才后悔莫及,人生最痛苦的事情莫过于此。。。。。。 好,即便如此,我们还是满怀希望的向前奔去。接着写卷二。 还要提一下,上次最后说到的delegate,在我了解了它的实现和用途以及看到我的偶像

  • 本文向大家介绍Objective-C语言日期比较,包括了Objective-C语言日期比较的使用技巧和注意事项,需要的朋友参考一下 示例 NSDate在Objective-C中有4种比较s的方法: - (BOOL)isEqualToDate:(NSDate *)anotherDate - (NSDate *)earlierDate:(NSDate *)anotherDate - (NSDate *

  • 本文向大家介绍易语言输入字比较方法,包括了易语言输入字比较方法的使用技巧和注意事项,需要的朋友参考一下 易语言输入字比较,这个函数比较有意思,我们可以比较汉字和拼音,具体请往下看。 1、易语言新建一个windows窗口 点击进入代码编辑区 具体看如何用易语言编写自己第一个程序? 2、我们输入函数 输入字比较() 3、展开这个函数 我们发现这个函数有4个参数,其中一个默认为真 4、第一个参数我们输入

  • 本文向大家介绍C语言字符串大小比较,包括了C语言字符串大小比较的使用技巧和注意事项,需要的朋友参考一下 C语言字符串大小比较 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍在C语言中比较两个字符串是否相等的方法,包括了在C语言中比较两个字符串是否相等的方法的使用技巧和注意事项,需要的朋友参考一下 C语言strcmp()函数:比较字符串(区分大小写) 头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: 【参数】s1, s2 为需要比较的两个字符串。 字符串大小的比较是以ASCII 码表上的顺序来决定