王朝网络
分享
 
 
 

C++程序员快速学习C#---(二)

王朝c#·作者佚名  2006-02-01
宽屏版  字体: |||超大  

原创 我的网址 http://blog.csdn.net/hsuyuan/ 欢迎探讨学习

五.表达式

C#中的运算符,优先级和C++一样,但是需要注意下面的四个运算符

* , -> , & ,sizeof

上面的四个运算符在C#的不安全代码中可以使用,但在一般的C#代码中使用是错误的,C#取消了指针,想当然和指针有关的操作符都不能用了.

六.流程控制

1.if/if….else语句

这个语句和C++没有区别.但是结合类型定义中所讲的类型转换,这里需要注意一个问题,看程序

bool a;

if (a=Getnum()) //假设Getnum返回一个整数值

{

//a为非0

}

else

{

//a为0

}

在C++中上面的代码是正确的,但是在C#中是错误的,一个整数值是不可以赋给BOOL值的,这样做可以增强代码的安全性

2.switch

选择分支语句和C++用法也相当,但是C#中对它的格式更加严格了,每个case语句后面都必须跟上

break,不然就是错误的语句,但是也有例外,可以使用臭名昭著的GOTO语句,跳转到下个case语句,这样编译器是不会报错的,当然如果你真的希望有多个条件执行相同语句的话,可以省略写成下面的方法:

switch (char c)

{

case ‘ua’:

case ‘us’:

case ‘en’:string language=”English”;break;

}

3.循环语句

C++中的3种循环语句:for , while , do…while 和C#中是相同的

但是C#中添加了一种循环语句,在对数组的输出方面的使用非常灵活,

它就是:foreach

它的语法格式:

foreach (<变量类型> <变量名> in <数组名>) {}

不管是一维还是多维数组,操作都一样方便,它会自动知道数组的大小对其操作,我们不需要关心它是否会溢出.

C#中现在增加了一种变长数组,对它的操作,foreach也可以做到,但格式不同,看下面的例子

例:

using System;

namespace ConsoleApplication1

{

class Class1

{

static void Main

(string[] args)

{

int[,] a1=new int[2,2]{{1,2},{3,4}};

foreach (int b1 in a1)

{

Console.WriteLine ("{0}",b1);//对不变长数组的操作

}

int[][] a2=new int[2][];

a2[0]=new int[2]{0,1};

a2[1]=new int[3]{3,4,5};

foreach (int[] b20 in a2)

{

foreach (int b21 in b20)

Console.WriteLine ("{0}",b21);//对变长数组的操作

}

}

}

}

对于变长数组的如此操作,是因为a2包含的是一个int[]元素,而不是int元素,想想我们之前讲的变长数组也叫数组的数组,其实是2个数组的欠套.

现在我们再来看一个对foreach的使用:

int[,] a1=new int[2,2]{{1,2},{3,4}};

foreach (int b1 in a1)

{

b1=3; //错误

}

为什么错误.还记得上面我说的一句话吗?--”在对数组的输出方面的使用非常灵活”.也许你已经看出来了,是的,foreach语句只能对数据进行输出,因为它是只读的,不能改变任何数组元素的值.

4.跳转语句

C#中的跳转语句和C++中一样

有:goto , return ,

break ,continue

七.函数

讲到C#的函数,觉得有点别扭,因为现在的所以函数都是包含在一个类当中了,这样就和C++中类的方法的用法相似了,所以在C++中的标准函数需要定义的过程也没有了,这样确切的说函数在C#中已经不复存在了,都变成方法了嘛!

首先我们来看一下C#方法的使用的例子

例:

using System;

namespace ConsoleApplication1

{

class Class1

{

static void Main

(string[] args)

{

Write();

}

static void Write()

{

Console.WriteLine ("This is Text");

}

}

}

看上去用法和C++差不多,但是注意static静态限制符,我们可以回想一下C++类的方法的使用

class my

{

public:

void a(){ b();}

void b(){cout<<"this is text";}

};

void main()

{

my a;

a.a ();

}

C++在类中调用自己的方法是不需要加static的,但是在C#中必须加,因为C#是完全面向对象的语言,只有当方法是静态的时候才能够直接调用,不然必须先用类创建一个实例才能调用

1.参数

C#的方法和C++中的函数在返回值,参数传递方面是一样的,唯一的区别是引用的传递.

也许你想起来上面所讲,C#中取消了&操作符,这意味着没有了引用传递了,其实不是没有,而是不用&,改成了ref

例:

class Class1

{

static void Main

(string[] args)

{

int a=1,b=2;

Console.WriteLine ("{0} {1}",a,b);

change(ref a,ref b) ;

Console.WriteLine ("{0} {1}",a,b);

}

static void change(ref int a,ref int b)

{

int c;

c=a;

a=b;

b=c;

}

}

输出结果:

1 2

2 1

在形参和实参中加上ref就完成了引用,这样对a,b的值进行了交换

2.方法重载

C#的函数重载和C++一样没有区别

3.结构函数

上面我用了方法,这里是函数,所以它首先不需要关键字static,这个函数是一个结构的函数,它在类的外部,所以不需要static.

例:

struct mytext

{

public int num;

public int text()

{

return num;

}

}

class Class1

{

static void Main

(string[] args)

{

mytext frist;

int a;

frist.num =5;

a=frist.text ();

Console.WriteLine ("{0}",a);

}

}

输出结果:

5

4.作用域

基本上C#的变量作用域和C#没有区别,只要注意一点,对于全局变量,放在Main函数的外面,类的内部,并且和方法一样,必须加上static.

5.委托

委托在C++里面是没有的,它的定义也很难懂,它是一种可以把引用存储为函数的类型.虽然你读了N便也不太明白它讲的意思,那么我们就通过一个程序来看看,它到底有什么功能,它做了写什么事情.

using System;

namespace ConsoleApplication1

{

class Class1

{

delegate double chooes(double num1,double num2);

static double add(double num1,double num2)

{

return num1+num2;

}

static double odd(double num1,double num2)

{

return num1-num2;

}

static void Main

(string[] args)

{

chooes process;

bool m_bool=true;

double num;

if (m_bool)

{

process =new chooes (add);

}

else

{

process =new chooes (odd);

}

num=process(10,5);

Console.WriteLine ("{0}",num);

m_bool=false;

if (m_bool)

{

process =new chooes (add);

}

else

{

process =new chooes (odd);

}

num=process(10,5);

Console.WriteLine ("{0}",num);

}

}

}

首先看到一个不认识的关键字: delegate

它即使定义委托函数的关键字.delegate 后面跟着的就和C++中的函数定义一样,但是委托函数没有函数体,从程序中你就可以看见.程序中还有2个函数除了函数名字不同外,函数类型,参数都是一样的,委托函数定义后,必须和类一样定义一个实例,然后用关键字new初始化.从初始化中你因该可以看出端倪了,它把另外的函数初始化了给它,哈哈,对了它其实就是别的函数的一个别名嘛,难怪称作引用存储.通过它的委托,它就可以变成不同函数的别名,这样的好处就是.我们不需要知道真正有作用的函数是哪一个,只需要知道一个函数就可以对其他任意的函数进行调用,这样的选择就象一个要使用的”插件”,委托函数的重要用途在windows程序开发中的事件和事件处理中才能完全体现.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有