1.大多数面向对象编程语言都有两种截然不同的类型:一种是语言本身所固有的类型(基本类型),一种是可以由语言的使用者来创建的类型(类)。

2.C#根据数据的存储位置,把数据类型分为两种类型:值类型变量把其值存储在堆栈中,引用类型的变量把数据存放在堆中。

3.值类型

  a.值类型

    当我们拥有一个数值类型的变量时,实际上就拥有了一个包含了实际数据的变量。数值类型的首要规则就是它不能为空(NULL)。

  b.结构

    在C#中,结构是一种特殊的类,它是值类型。结构是在堆栈上。

  c.枚举

    枚举有以下优点:

    △枚举可以使代码更便于维护,有助于确保给变量指定合法、期望的值。

    △枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。

    △枚举便于使代码更易于键入。

 

  在编程时,创建一个枚举从长远来看可以节省大量的时间。聪明地、适当地使用枚举是专业程序员的一个特点。

  当缺省时,枚举值是从0开始的,以1为增量。

4.引用类型

  在C#中定义了多种引用类型,如类、数组、委托和接口。

  a.Object类型

    所有的类都是从Object派生的,包括自己定义的类。

    Object类型执行许多基本的用途的方法。如Equals和ToString方法。

    Equals方法是对对象的实例进行相等比较。

    ToString方法在默认情况下是用来获得对象名字的。

  b.字符串 

    为了解决其他语言中的字符串问题,C#创建了String类。

    C#中的String类处于System名字空间中。String是一个类,有几个相关的方法。

这些方法有Compare,Format,Trim,ToUpper,ToLower,Split,IndexOf,IndexOfAny,Replace,Contains

  c.数组

    数组的生命方式如下:

数组类型[] 数组名;

数组必须在使用前进行初始化,访问没有初始化的数组将会报错。

数组的初始化有两种:

int[] myArray={1,2,3,4};或是int[] myArray=new int[4];

5.封箱和拆箱

封箱(boxing):把值类型转换为System.Object类型,拆箱(unboxing):相反地转换过程。

6.类成员

a.数据成员包含类的数据,主要有字段、常量和事件。

字段是与类相关的变量。常量是指在编译时已知并保持不变的值。常数被声明为字段,声明时在字段的类型前面使用const关键字。常数必须在声明时初始化。

事件可以让对象通知调用某些特定的行为发生的时间。

b.函数成员

函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和析构函数、运算符和索引。

方法是与某个特定类相关的函数,它们可以是实例方法,也可以是静态方法。实例方法处理类的特定实例,静态方法提供了更一般的功能,不需要实例化就可以调用。比如,我们经常使用的Console类下面的WriteLine和ReadLine方法。

方法的声明格式为:

访问修饰符  返回类型  方法名(参数列表)

属性是用于访问类的公共字段类似方法访问的函数。C#为读写类上的属性提供了专用语法,使类的开发人员更易于维护属性的代码。

构造函数是在实例化对象时调用的函数。它们必须与所属的类同名,且不能有返回类型,构造函数可用于在实例化对象时设置字段的值。

析构函数在对象被析构时调用。它们的名称和类相同,但是在前面有一个“~”符号。

索引允许对象以数组或集合的方式进行访问类成员变量。

c.访问修饰符

声明的可访问性        含义

public                访问不受限制

protected             访问仅限于包含类或从包含类派生的类型

internal              访问仅限于当前程序集

protected internal    访问仅限于包含类派生的当前程序集或类型

private               访问仅限于包含类型

d.方法的重载

我们把在同一个类中定义几个同名的方法,但是这些方法带有不同类型的或是数量不同的参数,称为方法重载。

方法重载对编译器有两个限制。重载的方法的参数必须不同,即要么参数的个数不同,要么参数的类型不同。方法名必须要相同。

重载使用的场合1.默认的参数;2.不同的输入类型。

e.构造函数:有时候,我们在实例化类对象的时候,希望对对象中的变量进行初始化。这个时候,我们可以定义一些特殊的方法,无论何时创建类的实例时,总可以调用这些方法。这些方法就是构造函数。

使用构造函数的好处:它能保证兑现被使用之前经过合适的初始化过程。当用户实例化一个对象时,该对象的构造函数首先被调用,并在用户对该对象进行其他操作时,构造函数必须执行完。

在C#中,类的构造函数必须与类同名,而且没有返回类型。