2025年C语言核心概念与编程技巧深度解析_第1页
2025年C语言核心概念与编程技巧深度解析_第2页
2025年C语言核心概念与编程技巧深度解析_第3页
2025年C语言核心概念与编程技巧深度解析_第4页
2025年C语言核心概念与编程技巧深度解析_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#基础知识点

1、数据类型

1.1、值类型、引用类型

1.2、预定义类型

1.3、类型转换

1.4、装箱和拆箱

2、变量、常量

2.1、变量

2.2、常量

3、运算符和体现式

3.1、运算符、体现式

3.2、特殊运算符

3.3、优先级别

4、流程控制

4.1、条件语句

4.2、循环语句

4.3、跳转语句

4.4、异常处理

5、程序构造

5.1、类

5.2、命名空间

5.3、Main措施

6、程序例子

7、作业

I口MAEl

一数据类型

1.1值类型、引用类型

C#的数据类型可以提成两大部分:值类型和引用类型。

值类型的变量总是直接包括着自身的数据,而引用类型的变量是指向实际数据的地

址。

C#值类型包括:整型、布尔型、实型、十进制型、构造和枚举、接口和数组。

从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用。这两种类型存

储在内存的不一样地方:值类型存储在堆栈中,而引用类型存储在托管堆上。注意辨别某

个类型是值类型还是引用类型,由于这种存储位置的不一样会有不一样的影响。例如,im

是值类型,这表达下面的语句会在内存的两个地方存储值20:

〃i和j都是整型变量

i=20;

j=i;

但考虑下面的代码。这段代码假定己经定义了一种类classl,classl是一种引用类型,它有

一种int类型的组员变量Value:

class1x,y

x=newclass1();

x.Value=30;

y=x;

Console.WriieLine(y.Value);//输出30

y.Value=50;

Console.WriieLine(x.Value);〃输出50

要理解的重要一点是在执行这段代码后,只有一一种classl对象。x和y都指向包括该对象的

内存位置。由于x和y是引用类型的变量,申明这两个变量只是保留了一种引用一一而不

会实例化给定类型的对象,由于x和y引用同一种对象,因此对x的修改会影响y,反之

亦然。因此上面的代码会显式30和50。

假如变量是一种引用,就可以把其值设置为null,确定它不引用任何对象:

y=null;

在C#中,基本数据类型如bool和long都是值类型。假如申明一种bool变量,并给它赋予

另一种bool变量的值,在内存中就会有两个bool值。假如后来修改第一种bool变量的

值,第二个bool变量的值也不会变化。这些类型是通过值来复制的。相反,大多数更复杂

的C#数据类型,包括我们自己申明的类都是引用类型。它们分派在堆中,共生存期可以跨

多种函数调用,可,以通过一种或几种别名来访问。CLR(CommonLanguageRuntime公共

语言运行库指.NET的运行时支持,包括一种面向对象类型系统和某些运行时服务)执行一

种精细的算法来跟踪哪些引用变量仍是可以访问的,哪些引用变量已经不能访问了。CLR

会定期进行清理,删除不能访问的对象,把它们占用的内存返回给操作系统。这是通过垃

圾搜集器实现的。

1.2预定义类型

C#承认的基本预定义类型并没有内置于语言中,而是内置于.NETFramework中。例

如,在C#中申明一种ini类型的数据时,申明的实际上是.NET构造System.Inl32的一种实

例。C#支持两个预定义的引用类型,如下表:

CTS:公共类型系统

名称CTS类说明

ObjectSystem.Object根类型,其他类型都是从它派生而来的(包括值类型)

StringSystem.StringUnicode字符串

1.object类型

在C#中,object类型就是最终的父类型,所有内在和顾客定义的类型都从它派生而来。这

是C#的一种重要特性,object类型就可以用于两个目的:

•可以使用object引用绑定任何特定子类型的对象。

•object类型执行许多基本的•般用途的措施,包括Equals。、GetHashCo出()、

GetTypeO和ToString()o顾客定义的类也许需要使用一种面向对象技术——重写,

提供其中某些措施的替代执行措施。例如,重写TuSiriugO时,要给类提供种措

施,该措施可以提供类自身的字符串表达。假如类中没有提供这些措施的实现,

编译器就会在对象中选择这些实现,它们在类口的执行不一定对的。

2.string类型

C#有string关键字,在翻译为.NET类时,它就是System.string。有了它,像字符串连接和

字符串复制这样的操作就很简朴了:

stringstrl="Hello

stringstr2="World";

stringstr3=strl+str2;//字符串连接

尽管这是一种值类型的赋值,但siring是一种引用类型。Siring对象保留在堆上,而不是堆

栈匕因此,当把一种字符串变量赋给另一种字符串时,会得到对内存中同一种字符串的

两个引用。不过,siring与引用类型在常见的操作上有某些区别。例如I,修改其中一种字符

串,注意这会创立一种全新的string对象,而另一种字符串没有变化。考虑下面的代码:

usingSystem;

classStringExample

(

publicslat沁iniMain()

{

stringsi="astring0;

strings2=s1;

Console.WriteLine(us1is"+si);

Console.WriteLine("s2is"+s2);

si="anothersiring";

Console.WriteLineC's1isnow"+si);

Console.WriteLinc("s2isnow"+s2);

return0;

)

I

其输出成果为:

siisastring

s2isastring

s1isnowanotherstring

s2isnowastring

换言之,变化si的值对s2没有影响,这与我们期待的引用类型恰好相反。

1.3类型转换

1,隐式转换

隐.式转换就是系统默认的、不需要加以申明就可以进行的转换。隐式转换一般不

会失败,转换过程中也不会导致信息丢失。

隐式转换包括下面几种:

•从sbyte类型到short,int,long,float,double,或decimal类型。

•从byte类型到short,ushoitint,uint、long,ulong、float,double.或decimal类型。

•从short类型到mt.long,float,double,或decimal类型。

•从ushort类型到int,unit,long,ulong.float,double,或decimal类型。

•从int类型到long,float,double,或decimal类型。

•从innt类型到long,ulong,float,double,或decimal类型。

•从long类型到float,double,或decimal类型。

•从ulong类型到floar.double,或decimal类型。

•从char类型到ushortint,unit,long,ulong,floatdouble,或decimal类型。

•从float类型到double类型。

2.显式转换

显式类型转换,就是强制类型转换。与隐式转换恰好相反,显式转换需要顾客明

确指定转换的类型,不如看下面例子:

long1=5(XX);

intI=(int)l;

显式转换可以发生在体现式的计算过程中。它并不是总能成功,并且常常也许引

起信息丢失。显式转换包括所有的隐式转换。

显式转换包括下面几种:

从sbyte到byte,ushoit.umt,ulong.或char。

从byte到sbyte或char。

从short至【Jsbyte,byte,ushort,unit,ulong,或char。

从ushoit至ijsbyte.byte,short,或char。

从int到sbyte.byte,short,ushort.uint,ulong,或char。

从umt到sbyte,byte,short,ushoit.int,或char。

从long至sbyte、byte,short,ushort.mt,uiiit,ulong,或char。

从ulongfl]sbyte,byte,short,ushortmt.uiiit,long,或char。

从charfijsbyte,byte,或short。

从float到sbyte,byte,short,ushort,mt,unit,long,ulong,char.或decimal3

从double至ijsbyte,byte,short,ushort,int,uiiit,long,ulong,charfloat,or或

1.4装箱和拆箱

装箱和拆箱使我们可以把一种值类型当作一种引用类型看待。装箱转换是指将一种值

类型隐式的转换成一种Objeci类型,拆箱转换是指将一种Object类型显式地转换成一种值

类型,他们互为逆过程。

装箱(boxing)

装箱转换是指将一种值类型隐式转换成一种object类型,或者把这个值类型转换成一

种被该值类型应用的接口类型。把一种值类型的值装箱,也就是创立一种object实例并将

这个值给这个objet.不如:

Inti=10;

Objectobj=i;

拆箱(unboxing)

拆箱转换是指将一种对象类型显式转换成一种值类型,或是将一种接口类型显示地转

换成一种执行该接口的值类型。

拆箱的过程分为两步:首先,检查这个对象的实例,看它与否为给定的值类型的装箱

值。然后,把这个实例的值拷贝给值类型的变量。如:

Inti=10;

Objectobj=i;

Intj=(int)obj;

二变量、常量

2.1v变量

在C#中申明变量使用下述语法:

datatypeidentifier:

例如:inti;

一旦它被申明之后,就可以使用赋值运算符(二)给它分派一种值:i=l0;

还可以在一行代码中申明变量,并初始化它的值:inii=10;

假如在一种语句中申明和初始化「多种变量,那么所有的变量都具有相似的数据类型:

intx=10,y=20;

要申明类型不一样的变量,需要使用单独的语句。在多种变量的申明中,不能指定不一样

的数据类型:

intx=10;

booly=true;

intx=10.booly=true;//这样编译报错

L变量的初始化

变量的初始化是C#强调安全性的另一种例子。简朴地说,C#编译器需要用某个初始值对

变量进行初始化,之后才能在操作中引用该变量。大多数现代编译器把没有初始化标识为

警告,但C#编译器把它当作错误来看待。这就可以防止我们无意中从其他程序遗留下来的

内存中获取垃圾值。

C#有两个措施可保证变量在使用前进行了初始化:

•变量是类或构造中的字段,假如没有显式进行初始化,在默认状态下当创立这些

变量时,其值就是0。

•措施的局部变量必须在代码中显式初始化,之后才能在语句中使用它们的值。此

时,初始化不是在申明该变量时进行的,但编译器会通过措施检查所有也许的途

径,假如检测到局部变量在初始化之前就使用了它的值,就会产生错误。

同样的规则也合用于引用类型。考虑下面的语句:

SomethingobjSomething;

在C#中,这行代码仅会为Something对象创立一种引用,但这个引用还没有指向任何对

象。对该变量调用措施或属性会导致错误。

在C#中实例化一种引用对象需要使用new关键字。如上所述,创立一种引用,使用new

关键字把该引用指向存储在堆上的一种对象:

objSoincthing=newSomcthingO;//ThiscreatesaSomethingontheheap

2.变量的作用域

变吊的作用域是可以访问该变量的代码区域。一般状况下,确定作用域有如下规则:

•只要字段所属的类在某个作用域内,其字段(也称为组员变量)也在该作用域内局部

变量存在于表达申明该变量的块语句或措施结页的封闭花括号之前的作用域内。

•在for、while或类似语句中申明的局部变量存在于该循环体内。

局部变量的作用域冲突

大型程序在不•样部分为不•样的变量使用相似的变量名是很常见的。只要变量的作用域

是程序的不一样部分,就不会有问题,也不会产生模糊性。但要注意,同名的局部变量不

能在同一作用域内申明两次,因此不能使用下面的代码:

intx=20;

//其他代码

intx=30;

字段和局部变量的作用域冲突

在某些环境下,可以辨别名称相似(尽管不是通过完全限定的名称)、作用域相似的两个标

识符。此时编译器容许申明第二个变量。原因是C#使得变量之间有一种基本的辨别,它把

申明为类型级的变量看作是字段,而把在措施中申明的变量看作局部变量。

2.2、常量

在申明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一种常

量。顾名思义,常量是其值在使用过程中不会发生变化的变量:

constinta=100;〃变量的值不能变化

C#中只能把局部变量和字段申明为常量。

常量具有如下特性:

•常量必须在申明时初始化。指定了其值后,就不能再修改了。

•常量的值必须能在编译时用丁计算。因此,不鸵用从种变量中提取的值来初始

化常量。假如需要这样做,应使用只读字段。

•常量用易于理解的清晰的名称替代了“含义不明确的数字或字符串”,使程序更

易于阅读。

•常量使程序更易于修改。例如,在C#程序中有一种SalesTax常量,该常量的值为

6%。假如后来销售税率发生变化,可以把新值赋给这个常量,就可以修改所有的

税款计算,而不必查找整个程序,修改税率为0.06的每个项。

•常量更轻易防止程序出现错误。假如要把另一种值赋给程序中的一种常量,而该

常量已经有了一种值,编译器就会汇报错误。

三运算符和体现式

3.1、运算符、体现式

算术操作符和算术体现式

+加法操作符

-减法操作符

*乘法操作符

/除法操作符

%求余法操作符

例:加法体现式

EnumWeekday

{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

Weekdaydayl=weekday.Sunday;

Weekdayday2=dayI+2;

Console.WriteLine(day2);

成果是:Tuesday

赋值运算符

=+=—=*=/=&=A=«=»=

=是最简朴的赋值运算符,其他的是复合赋值,X+=5等价于X=X+5;

关系运算符

==等于

!=不等于

<不不小于

>不小于

<=不不小于等于

>=不小于等于

Is运算符

Is元算符被用于动态的检查运行时对象类型与否和给定的类型兼容。运算“eisT”的

成果,其中,e是一种体现式,T是一种类型,返回值是一种布尔值。它表达,e与否能通

过引用转换,装箱转换,成功的转换于T类型。

如:Iisint成果是:true

As操作符

As操作符通过引用转换或装箱转换将一种值显式地转换成指定的引用类型。不像显式

类型转换,as不会产生任何异常。假如转换不可以进行,那么成果值为nullo形如:as

T”的运算,e是一种体现式,T是一种引用类型。返回值的类型总是T的类型,并且成果

总是一种值。如:

?asstring;

虽然,字符型不能转换为字符串类型,程序可以通过,不过有一种警告。

位运算

&与

I或

A异或

~取补

«左移

»右移

3.2、特殊运算符

三元操作符?:

条件体现式b?x:y,先计算条件b,然后进行判断。假如b的值为true,计算x的值,运

算成果为x的值;否则,计算y,运算成果为y值。一种体现式,从不会即计算x值,又计

算y值。条件体现式是向右关联,例如:

a?b:c?d:e将按a?b:(c?d:e)的形式执行。

自增和自减操作符

++——就是对变量自身加一或者减一,注意,自增和自减运算符必须是对一种变

量,一种属性访问器,一种索引访问器,而不能是常量或其体现式,如:5++,

(x+y)++都是非法的。

自增和自减操作符有前缀和后缀之分,前缀遵照“先增减,后使用”,后缀遵照“先使

用后增减”。

New操作符

一般用于创立一种新的类型实例,如:classA{}Aa=newA();改运算符尚有其他更多

的使用方法,详细如下:

在C#中,new关键字可用作运算符、修饰符或约束。

I)new运算符:用于创汇对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。

2)new修饰符:在用作修饰符时,new关键字可以显式隐藏从基类继承的组员。

3)new约束:用于在泛型申明中约束也许用作类型参数的参数的类型。

有关第二种使用方法看下例:

usingSystem;

namespaceConsoleApplication1

{

publicclassBaseA

{

publicintx=1;

publicvoidInvoke()

(

Console.WriteLine(x.ToStringO);

)

publicintTruevalue

get<returnx;}

set{x=value;}

)

}

publicclassDerivedB:BaseA

{

newpublicintx=2;

newpublicvoidInvoke()

<

Console.WriteUne(x.ToString());

)

newpublicintTrueValue

<

get{returnx;}

set(x=value;}

)

}

classTest

<

staticvoidMain(string[]args)

(

DerivedBb=nev/DerivedB();

b.Invoke();〃调用DerivedB的Invoke措施,输出:2

Console.WHteLine(b.x.ToString());〃输出DerivedB的组员x值:2

BaseAa=b;

a.Invoke();〃调用BaseA的Invoke措施,输出:1

a.TrueValue=3;〃调用BaseA的属性TrueValue.修改BaseA的组员x的值

Console.WriteLine(a.x.ToString());〃输出BaseA的组员x的值:3

Console.WriteLine(b.TnjeValue.ToSEngO);〃输出DerivedB的组员x的值,仍然是:1

〃可见,要想访问被隐藏的基类的组员变量、属性或措施,措施就是将子类造型为父类,然

〃后通过基类访问被隐藏的组员变量、屈性或措施。

)

}

}

new约束指定泛型类申明中的任何类型参数都必须具有公共的无参数构造函数.请看下例:

usingSystem;

usingSystem.Collections.Generic;

namespaceConsoleApplication2

publicclassEmployee

privatestringname;

privateintid;

publicEmployee()

{

name="Temp";

id=0;

>

publicEmployee(strings,inti)

name=s;

id=i;

}

publicstringName

{

get{returnname;}

set{name=value;}

}

publicintID

<

get<returnid;}

set(id=value;}

}

}

classItemFactory<T>whereT:new()

{

publicTGetNewItem()

(

returnnewT();

}

}

publicclassTest

(

publicstaticvoidMain()

(

ItemFactory<Employee>EmployeeFactory=newItemFactory<Employee>();

〃〃此处编译器会检查Employee与否具有公有的无参构造函数。

〃若没有则会有TheEmployeemusthaveapublicparameterlessconstructor错误。

Console.WriteLine("{O}'IDis{1}.",EmployeeFactory.GetNewItem().Name,

EmployeeFactory.GetNewltem().ID);

}

)

}

Typeof操作符

用于获得系统原形对象的类型。如:typeof(int)等于int32.

Checked和unchecked操作符

Checked和unchecked操作符用于整形算术运算时控制目前环境中的溢出检查。

Constintx=1000000;

Constinty=1000000;

Returnchecked(x*y)//编译时会报溢出错误

3.3、优先级别

当一种体现式包括多种操作符时,操作符的优先级控制着单个操作符的求值次序。

表7-1操作符从高到低的优先级顺序

类别操作符

初级操作符(K)x.yfix)a[x]x++x-newtypeofsizcofcheckedunchecked

一元操作符+•!~++x—x(T)x

乘、除操作符•/%

加减操作符+-

移位操作符«»

关系操作符<><=>=isas

等式操作符==!=

逻辑与操作符&

逻辑异或操作符A

逻辑或操作符

条件与操作符

条件或操作符

条件操作符?:

赋值操作符=♦=/=%=+=-=«=»=&=|=

史流程控制

4.1、条件语句

条件语句可以根据条件与否满足或根据体现式的值控制代码的执行分支。c#有两个分支

代码的构造:if语句,测试特定条件与否满足;switch语句,它比较体现式和许多不一样

的值。

1.if语句

语法都是非常直观的:

if(condition)

statement(s)

else

statement(s)

还可以单独使用if语句,不加else语句。也可以合并elseif子句,测试多种条件。

2.switch语句

switch-case语句适合于从一组互斥的分支中选择一种执行分支。其形式是switch参数的背

面跟一组case子句。假如switch参数中体现式的值等于某个case子句旁边的某个值,就执

行该case子句中的代码。此时不需要使用花括号把语句组合到块中;只需使用break语句

标识每个case代码的结尾即可。也可以在switch语句中包括一种default于句,假如体现式

不等于其他case子句的值,就执行default子句的代码。下面的switch语句测试integerA变

量的值:

switch(intcgcrA)

(

case1:

ConsoIe.WriteLine("integerA=1");

break;

case2:

ConsoIe.WriteLineC'integerA=2");

break;

case3:

Consolc.WritcLincC^intcgcrA=3");

break;

default:

ConsoIe.WriteLineC'integerAisnot1,2,or3");

break;

注意case的值必须是常量体现式一不容许使用变量。

4.2、循环语句

C#提供了4种不一样的循环机制(for、while、do-while和foreach),在满足某个条件之

前,可以反复执行代码块。

1.for循环

C#的for循环提供的迭代循环机制是在执行下一次迭代前,测试与否满足某个条件,其语

法如下:

for(initializer;condition;iterator)

slalemcnl(s)

其中:

•initializer是指在执行第一次迭代前要计算的体现式(一般初始化为一种局部变量,

作为循环计数器);

•condition是在每次迭代循环前要测试的体现式(它必须等于true,才能执行下一次

迭代);

•iterator是每次迭代完要计算的体现式(一般是递增循环计数器)。当condition等于

false时,迭代停上。

for循环是所谓的预测试循环,由于循环条件是在执行循环语句前计算的,假如循环条件为

假,循环语句就主线不会执行。

for循环非常合用于一种语句或语句块反复执行预定的次数。下面的例子就是使用for循环

的经典使用方法,这段代码输出从0~99的整数:

for(inti=0;i<100;i=i+l)

(

Console.WritcLine(i);

)

2.while循环

while循环与for循环同样,while也是一种预测试的循环。其语法是类似的,但while循环

只有一种体现式:

while(condilion)

statement(s);

与for循环不一样的是,while循环最常用于下述状况:在循环开始前,不懂得反复执行一

种语句或语句块的次数。一般,在某次迭代中,while循环体中的语句把布尔标识设置为

false,结束循环,如下面的例子所示。

inti=10,sum=0;

while(i>0)

{

i

sum+=i;

}

3.do...while循环

do-while循环是while循环的后测试版本。do-while循环适合于至少执行一次循环体的状

况:

inti=10,sum=0;

do

sum+=i;

}while(i>0);

4.foreach循环

foreach循环是我们讨论的最终一种C#循环机制。也是非常受欢迎的一种循环。

从下面的代码中可以理解foreach循环的语法,其中假定arrayOnnts是一种整型数组:

int[]numbers={4,b,6,1,2,3,~2,-1,0};

foreach(intiinnumbers)

System.Console.WriteLine(i);

其中,[breach循环一次迭代数组中的一种元素。对于每个元素,它把该元素的值放在int

型的变量temp中,然后再执行一次循环迭代。

假如需要迭代集合中的各项,并变化它们的值,就应使用for循环。

4.3、跳转语句

C#提供了许多可以立即跳转到程序中另一行代码的语句,在此,先简介got。语句。

1.goto语句

goto语句可以直接跳转到程序中用标签指定的另一行(标签是一种标识符:,后跟一种冒

号):

gotoLabel1;

Console.WriteLine("Thiswon'tbeexecuted");

LabelI:

Console.WriteLine("Continuingexecutionfromhere");

goto语句有两个限制。不能跳转到像for循环这样的代码块中,也不能跳出类的范

围,不能退出try...catch块背面的finally块。got。语句的名声不太好,在大多数状况下不容

许使用它。•般状况下,使用它肯定不是面向对象编程的好方式。

前面简要提到过break语句---在switch语句中使用它退出某个case语句。实际上,break

也可以用于退出for、以reach、while或do...while循环,循环结束后,立即执行背面的语

句。

假如该语句放在嵌套的循环中,就执行最内部循环背面的语句。假如break放在switch

语句或循环外部,就会产生编译时错误。

2.continue语句

continue语句类似于break,也必须用于for、foreach、while或do...while循环中。但它只从

循环的FI前迭代中退出,然后从循环的下一次迭代开始重新执行,而不是退出循环。

3.return语句

return语句用于退出类的措施,把控制返回措施的调用者,假如措施有返回类型,return语

句必须返回这个类型的值,假如措施没有返I可类型,应使用没有体现式的relum语句。

4.4、异常处理

Try-catch(s)

Try-finally

Try—catch(s)-finally

五程序构造

5.1.类

c#中的类是对数据构造的封装,是c#最事要的构成部分。我们运用类定义多种

新的数据类型,其中既包括数据内容,有包括数据操作,封装之后,类可以控制外界

对它组员的访问。

类的静态组员属于类,非静态组员属于这个类的某个实例。

在一种类的实例一一对象的生命周期中,最先执行的代码是类的构造函数,构造

函数总是用来初始化对象的特殊类型的函数。

不带参数的类的构造函数对类的实例的初始化始固定的,我们也可以使用带参数

的构造函数,通过向池传递参数来对类的不一样实例进行不一样的初始化。构造函数

同样也可以使用默认参数。

当这个类的实例超过了作用域的时候,或者由于其他理由被破坏时,析构函数将

释放分派给该实例的任何存储区。

5.2、命名空间

命名空间提供了一种组织有关类和其他类型的方式。与文献或组件不一样,命名空

间时一种逻辑组合,而不是物理组合,在c#文献中定义类时,可以把它包括在命名

空间的定义中,后来在定义另一种类,在另一种文献中执行有关操作时,就可以在同

一种命名空间中包括它,创立一种逻辑组合,告诉具他使用类的开发人员怎样使类畲

关,和对他们进行使用。

命名空间可以嵌套,如:

NamespaceA

{

NamespaceB

{

NamespaceC

(

代码块

每个命名空间名都由池所在的命名空间的名称构成,这些名称用句号隔开,首先是最

外层,最终是自己的名字。如:上面的例子也可以写成:

NamespaceA.B.C

代码块

不容许在另一种嵌套的命名空间中申明多部分的命名空间。也不能在同一命名空间中

有两个同名的类。

5.3、Main措施

C#程序是从措施Main。开始执行的。这个措施必须是类或构造的静态措施,并月其返

回类型必须是int或void。虽然显式指定public修饰符是很常见的,由于按照定义,必须在

程序外部调用该措施,但我们给该措施指定什么访问级别并不重.要,虽然把该措施标识为

private,它也可以运行。

在调用程序时,可以让CLR包括一种参数,将命令行参数转送给程序。这个参数是一种字

符串数组,老式称为args[但C#可以接受任何名称)。在启动程序时,可以使用这个数组,

访问通过命令行传送过来的选项。

下面的例子ArgsExample.es是在传送给Main措施的字符串数组中迭代,并把每个选项的

值写入控制台窗口:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceConsoleApplication2

(

classProgram

(

staticvoidMain(string口args)

(

fnr(inti=0:i<args.I.pngth:i++)

(

Console.WriteLine(args[i]):

)

}

}

)

一般使用命令行就可以编译这段代码。在运行编译好的可执行文献时,可以在程序名的背

面加上参数,例如:

在dos命令行中输入:存储目录/ConsoleApplication2/a/b,c

输出:/a

/b

/c

六程序例子

6.1v类的定义,继承,使用,类措施的重写

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceConso1e.App1ication1

{

classVehicle

(

publicintwheels;

publicfloatweight;

publicvoidF()

(

wheels=4;

weight=10:

classCar:Vehicle

(

intpassengers;

publicvoidF()

(

weight=8;

wheels=8;

Vehiclev=newVehicle();

v.wheels=4;

v.weight=6;

passengers=10;

Console.WriteLineC"{0}{1}{2}{3}{4}*,v.wheels,v.weight,wheels,weight,passengers);

)

publicoverridestringToStringO

(

stringResult=”继承来的weight:"+weight.ToStringO+”实例化Vehicle的weight:"

+weight.ToSti-ingO+”自己的属性passengers:"+passengers.ToStringO:

returnResult;

}

)

classProgram

(

staticvoidMain(string[]args)

(

Cars=newCar():

S.F();

Console.WriteLine(s.ToStringO);

}

}

)

6.2、运算符重载

运算符重载注意事项:

a.可被重载的一元操作符:+、・、!、~(取补)、+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论