77范文网 - 专业文章范例文档资料分享平台

C#入门经典第三版(最新)(2)

来源:网络收集 时间:2019-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

}

用语句Person OnePerson=new Person(\李四\生成对象时,将调用有参数的构造函数,而用语句Person OnePerson=new Person()生成对象时,调用无参数的构造函数。由于析构函数无参数,因此,析构函数不能重载。 1.3.6 使用Person类的完整的例子

下边用一个完整的例子说明Person类的使用:(VisualStudio.Net编译通过) using System;

namespace e1//定义以下代码所属命名空间,意义见以后章节 { class Person

{ private String name=\张三\类的数据成员声明 private int age=12;

public void Display()//类的方法(函数)声明,显示姓名和年龄 { Console.WriteLine(\姓名:{0},年龄:{1}\}

public void SetName(string PersonName)//指定修改姓名的方法(函数) { name=PersonName; }

public void SetAge(int PersonAge)//指定修改年龄的方法(函数) { age=PersonAge; }

public Person(string Name,int Age)//构造函数,函数名和类同名,无返回值 { name=Name; age=Age; }

public Person()//类的构造函数重载 { name=\田七\age=12; } }

class Class1

{ static void Main(string[] args)

{ Person OnePerson=new Person(\李四\生成类的对象 OnePerson.Display();

//下句错误,在其它类(Class1类)中,不能直接修改Person类中的私有成员。 //OnePerson.name=\王五\

//只能通过Person类中公有方法SetName修改Person类中的私有成员name。 OnePerson.SetName(\王五\OnePerson.SetAge(40); OnePerson.Display(); OnePerson=new Person(); OnePerson.Display(); } } }

键入CTRL+F5运行后,显示的效果是: 姓名: 李四,年龄:30 姓名: 王五,年龄:40 姓名: 田七,年龄:12 1.4 C#的数据类型

从大的方面来分,C#语言的数据类型可以分为三种:值类型,引用类型,指针类型,指针类型仅用于非安全代码中。本节重点讨论值类型和引用类型。 1.4.1 值类型和引用类型区别

在C#语言中,值类型变量存储的是数据类型所代表的实际数据,值类型变量的值(或实例)存储在栈(Stack)中,赋值语句是传递变量的值。引用类型(例如类就是引用类型)的实例,也叫对象,不存在栈中,而存储在可管理堆(Managed Heap)中,堆实际上是计算机系统中的空闲内存。引用类型变量的值存储在栈(Stack)中,但存储的不是引用类型对象,而是存储引用类型对象的引用,即地址,和指针所代表的地址不同,引用所代表的地址不能被修改,也不能转换为其它类型地址,它是引用型变量,只能引用指定类对象,引用类型变量赋值语句是传递对象的地址。见下例: using System;

class MyClass//类为引用类型 { public int a=0; }

class Test

{ static void Main() { f1(); }

static public void f1()

{ int v1=1;//值类型变量v1,其值1存储在栈(Stack)中 int v2=v1;//将v1的值(为1)传递给v2,v2=1,v1值不变。 v2=2;//v2=2,v1值不变。

MyClass r1=new MyClass();//引用变量r1存储MyClass类对象的地址 MyClass r2=r1;//r1和r2都代表是同一个MyClass类对象 r2.a=2;//和语句r1.a=2等价 } }

存储在栈中的变量,当其生命周期结束,自动被撤销,例如,v1存储在栈中,v1和函数f1同生命周期,退出函数f1,v1不存在了。但在堆中的对象不能自动被撤销。因此C和C++语言,在堆中建立的对象,不使用时必须用语句释放对象占用的存储空间。.NET系统CLR内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。例如,上例中引用变量r1及r2是MyClass类对象的引用,存储在栈中,退出函数f1,r1和r2都不存在了,在堆中的MyClass类对象也就被垃圾收集器撤销。也就是说,CLR具有自动内存管理功能。 1.4.2 值类型变量分类

C#语言值类型可以分为以下几种: ? 简单类型(Simple types)

简单类型中包括:数值类型和布尔类型(bool)。数值类型又细分为:整数类型、字符类型(char)、浮点数类型和十进制类型(decimal)。

? 结构类型(Struct types)

? 枚举类型(Enumeration types)

C#语言值类型变量无论如何定义,总是值类型变量,不会变为引用类型变量。 1.4.3 结构类型

结构类型和类一样,可以声明构造函数、数据成员、方法、属性等。结构和类的最根本的区别是结构是值类型,类是引用类型。和类不同,结构不能从另外一个结构或者类派生,本身也不能被继承,因此不能定义抽象结构,结构成员也不能被访问权限控制字protected修饰,也不能用virtual和abstract修饰结构方法。在结构中不能定义析构函数。虽然结构不能从类和结构派生,可是结构能够继承接口,结构继承接口的方法和类继承接口的方法基本一致。下面例子定义一个点结构point: using System;

struct point//结构定义

{ public int x,y;//结构中也可以声明构造函数和方法,变量不能赋初值 }

class Test

{ static void Main() { point P1; P1.x=166; P1.y=111; point P2;

P2=P1;//值传递,使P2.x=166,P2.y=111

point P3=new point();//用new生成结构变量P3,P3仍为值类型变量 }//用new生成结构变量P3仅表示调用默认构造函数,使x=y==0。 }

1.4.4 简单类型

简单类型也是结构类型,因此有构造函数、数据成员、方法、属性等,因此下列语句int i=int.MaxValue;string s=i.ToString()是正确的。即使一个常量,C#也会生成结构类型的实例,因此也可以使用结构类型的方法,例如:string s=13.ToString()是正确的。简单类型包括:整数类型、字符类型、布尔类型、浮点数类型、十进制类型。见下表: 保留字 System命名空间中的名字 字节数 取值范围 sbyte System.Sbyte 1 -128~127 byte System.Byte 1 0~255

short System.Int16 2 -32768~32767 ushort System.UInt16 2 0~65535

int System.Int32 4 -2147483648~2147483647 uint System.UInt32 4 0~4292967295

long System.Int64 8 -9223372036854775808~9223372036854775808 ulong System.UInt64 8 0~18446744073709551615 char System.Char 2 0~65535

float System.Single 4 3.4E-38~3.4E+38 double System.Double 8 1.7E-308~1.7E+308 bool System.Boolean (true,false)

decimal System.Decimal 16 正负?1.0???????到7.9?????之间

C#简单类型使用方法和C、C++中相应的数据类型基本一致。需要注意的是:

? 和C语言不同,无论在何种系统中,C#每种数据类型所占字节数是一定的。 ? 字符类型采用Unicode字符集,一个Unicode标准字符长度为16位。 ? 整数类型不能隐式被转换为字符类型(char),例如char c1=10是错误的,必须写成:char c1=(char)10,char c='A',char c='\\x0032';char c='\2'。

? 布尔类型有两个值:false,true。不能认为整数0是false,其它值是true。bool x=1是错误的,不存在这种写法,只能写成x=true 或x=false。

? 十进制类型(decimal)也是浮点数类型,只是精度比较高,一般用于财政金融计算。 1.4.5 枚举类型

C#枚举类型使用方法和C、C++中的枚举类型基本一致。见下例: using System; class Class1

{ enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

//使用Visual Studio.Net,enum语句添加在[STAThread]前边 static void Main(string[] args) { Days day=Days.Tue;

int x=(int)Days.Tue;//x=2

Console.WriteLine(\显示结果为:day=Tue,x=4 } }

在此枚举类型Days中,每个元素的默认类型为int,其中Sun=0,Mon=1,Tue=2,依此类推。也可以直接给枚举元素赋值。例如:

enum Days{Sat=1,Sun,Mon,Tue,Wed,Thu,Fri,Sat};

在此枚举中,Sun=1,Mon=2,Tue=3,Wed=4,等等。和C、C++中不同,C#枚举元素类型可以是byte、sbyte、short、ushort、int、uint、long和ulong类型,但不能是char类型。见下例:

enum Days:byte{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//元素为字节类型 1.4.6 值类型的初值和默认构造函数 所有变量都要求必须有初值,如没有赋值,采用默认值。对于简单类型,sbyte、byte、short、ushort、int、uint、long和ulong默认值为0,char类型默认值是(char)0,float为0.0f,double为0.0d,decimal为0.0m,bool为false,枚举类型为0,在结构类型和类中,数据成员的数值类型变量设置为默认值,引用类型变量设置为null。

可以显示的赋值,例如int i=0。而对于复杂结构类型,其中的每个数据成员都按此种方法赋值,显得过于麻烦。由于数值类型都是结构类型,可用new语句调用其构造函数初始化数值类型变量,例如:int j=new int()。请注意,用new语句并不是把int变量变为引用变量,j仍是值类型变量,这里new仅仅是调用其构造函数。所有的数值类型都有默认的无参数的构造函数,其功能就是为该数值类型赋初值为默认值。对于自定义结构类型,由于已有默认的无参数的构造函数,不能再定义无参数的构造函数,但可以定义有参数的构造函数。 1.4.7 引用类型分类

C#语言中引用类型可以分为以下几种:

? 类:C#语言中预定义了一些类:对象类(object类)、数组类、字符串类等。当然,程序员可以定义其它类。 ? 接口。 ? 代表。

C#语言引用类型变量无论如何定义,总是引用类型变量,不会变为值类型变量。C#语言引用

类型对象一般用运算符new建立,用引用类型变量引用该对象。本节仅介绍对象类型(object类型)、字符串类型、数组。其它类型在其它节中介绍。 1.4.8 对象类(object类)

C#中的所有类型(包括数值类型)都直接或间接地以object类为基类。对象类(object类)是所有其它类的基类。任何一个类定义,如果不指定基类,默认object为基类。继承和基类的概念见以后章节。C#语言规定,基类的引用变量可以引用派生类的对象(注意,派生类的引用变量不可以引用基类的对象),因此,对一个object的变量可以赋予任何类型的值: int x =25; object obj1; obj1=x;

object obj2= 'A';

object关键字是在命名空间System中定义的,是类System.Object的别名。 1.4.9 数组类

在进行批量处理数据的时候,要用到数组。数组是一组类型相同的有序数据。数组按照数组名、数据元素的类型和维数来进行描述。C#语言中数组是类System.Array类对象,比如声明一个整型数数组:int[] arr=new int[5];实际上生成了一个数组类对象,arr是这个对象的引用(地址)。

在C#中数组可以是一维的也可以是多维的,同样也支持数组的数组,即数组的元素还是数组。一维数组最为普遍,用的也最多。我们先看一个一维数组的例子: using System; class Test

{ static void Main()

{ int[] arr=new int[3];//用new运算符建立一个3个元素的一维数组

for(int i=0;i

这个程序创建了一个int类型3个元素的一维数组,初始化后逐项输出。其中arr.Length表示数组元素的个数。注意数组定义不能写为C语言格式:int arr[]。程序的输出为: arr[0] = 0 arr[1] = 1 arr[2] = 4

上面的例子中使用的是一维数组,下面介绍多维数组: string[] a1;//一维string数组类引用变量a1 string[,] a2;//二维string数组类引用变量a2 a2=new string[2,3]; a2[1,2]=\

string[,,] a3;//三维string数组类引用变量a3

string[][] j2;//数组的数组,即数组的元素还是数组 string[][][][] j3;

在数组声明的时候,可以对数组元素进行赋值。看下面的例子: int[] a1=new int[]{1,2,3};//一维数组,有3个元素。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C#入门经典第三版(最新)(2)在线全文阅读。

C#入门经典第三版(最新)(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/545986.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: