黑马程序员_C#面对对象概念

来源:互联网 发布:java就业实训 编辑:程序博客网 时间:2024/05/29 03:18

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 

面对对象

1.
   类定义了对象的性质,是C#语言和面向对象编程的基础.

   类是一种逻辑抽象的概念,C#使用类规范来构造对象,对象是类的实例.

   类是一种抽象的概念,它将一组具有相同性质的对象抽象成一个类,封装起来.

   类可以包含各种成员,例如字段,常量,方法等.

 定义一个名称为 HelloWorld 的类
 class HelloWorld   //定义一个类 HelloWorld
 {
 
 }

2. 对象
   对象是具体的事物,是类的实例.

   定义一个类之后.就可以创建该类的实例.
   通过对象调用类的实例字段和方法.

 创建一个 HelloWorld 类的对象 helloworld
 HelloWorld helloworld = new HelloWorld();   //定义一个HelloWorld类的对象helloworld

3. 方法
   方法是类的一个成员,它是包含一系列语句的代码块,可以改变对象的状态。

   它是类的一个动作
 
 为 HelloWorld类定义 Print()方法
 public void Prit()   //定义一个方法 Print()
 {
 
 }

   Main()方法称之为主方法,是所有程序运行的入口,其余的方法分为
   有参或无参两种,由Main()方法或者其他的方法进行调用。如果调用
   的是有参函数,则参数在调用时传递。

 为 HelloWorld 类添加 Main()方法
 class HelloWorld
 {
  static void Main()   //定义Main()方法
  {

  }
 }

          如何使用对象调用方法
          helloworld.Print();   //使用对象调用方法Print()

4. 命名空间
   命名空间是一种限定范围的技术,
   命名空间定义了一个声明区域,它提供了将一组名称与另一组名称进行区分的方法。
   一个命名空间中声明的名称不会与另一个命名空间中声明的形同名称冲突
           使用using指令引入System命名空间
            using System;   //引用命名空间System
注意:包含using指令的程序代码只能放在代码文件的开头处。

 using System;
 namespace HelloWorld
 {
  Class HelloWorld
  {
   public void Print()
   {
    Console.WriteLine("Hello,World");
   }
   static void Main(string[] args)
   {
    HelloWorld helloworld = new HelloWorld();
    helloworld.Print();
    Console.ReadLine();
   } 
  }
 }

1. 继承性
   继承性(inheritance)是指在某种情况下,一个类可能会存在一个或多个"子类"。
   子类比原本的类(称为"父类")要更加具体化,往往具有更多的属性和行为,父类拥有的属性或方法,子类同样可以调用。


2. 多态性
   多态性(polymorphism)指类的方法在不同的类中被调用时,可以实现的不同结果。
   比如我们可以使用Print()方法打印输出一个int型的数字10。或者是其他的数据类型,如浮点性0.02等。


3. 接口
   接口(interface)和类非常相似,它是用来描述某一类对象具有某种属性和行为,但是不具体指明这些属性
   和行为到底是什么。
   接口仅仅是描述一种规范,但是不具体实现这些规范,(一般是用类来实现接口的属性和方法)。

 类型
   C#语言中的每一个类型都是直接或间接派生于object类型,即object类型是C#语言所有类型的最终基类型。

1. 值类型(value-type):它的变量直接包含其数据。
2. 引用类型(reference-type):它的变量只存储对其数据的引用(即访问其数据的访问地址)
   引用类型的变量又称为对象(object)。
3. 指针类型(point-type):和C,C++语言中的指针类似。

注意:对于值类型而言,值类型的变量总是包含该变量的值,它的值不可能为null.
         对于引用类型而言,两个变量可以引用同一个对象,因此在操作引用类型的变量时,可能同时修改了另一个引用类型变量的值。

  
   值类型的变量直接存储其数据,而引用类型的变量直接存储其数据的访问地址。

  

值类型包含结构类型和枚举类型。结构类型包含数值类型、布尔类型和自定义结构类型。数值类型又包括整数类型、浮点数类型和decimal类型。数值类型包括sbyte、byte、int、uint等类型。

引用类型包括object、string、类、接口、委托和数组类型。

  

值类型的变量直接包含其数据,而且其值不可能为null。

值类型要么是结构类型,要么是枚举类型。在操作值类型的变量时,只会影响该变量的数据,而不会影响另外一个变量的值。

所有的值类型都直接或间接派生于System.ValueType类型

注意:System.ValueType类型本身不是值类型,而是引用类型。

值类型包括结构类型、枚举类型、布尔类型、自定义结构类型、sbyte、byte、char、short、ushort、int、uint、long、ulong、float、double和decimal类型。其中,C#语言提供了一种被称为“简单类型(simple type)”的预定义结构类型。这些类型通过C#保留字标识,如char、int等。

System.ValueType是值类型的基础。所有的值类型都是由它直接或者间接继承而来。

注意:System.ValueType类型本身不是值类型,而是引用类型,且继承于object类型。

System.ValueType类型的方法:

Equals():判定当前实例与指定的对象是否相等。

ToString():返回当前实例的完全限定类型名称。

System.ValueType x = 10;         ///声明x变量,并赋值为10

Console.WriteLine(x.ToString());  ///获取x变量的字符串表示形式,并显示在控制台中

整数类型

1.int类型Int类型用来表示基本的整数类型。它表示的整数是32位,范围从–2 147 483 648到2 147 483 647。

int i = 5;                  //声明一个int型的变量i

2.long类型Long类型用来表示有符号的整数类型。它表示的整数是64位,范围从–9 223 372 036 854 775 808到9 223 372 036 854 775 807。

long j = 200800000000000;       //声明一个long型的变量j

3.char类型char类型表示一个16位的unicode字符,而且可以隐式转换为一个整数,反之则必须强制转换。

char s = 'a';                          //声明一个char型的变量s

4. 浮点型数据表示的是实数,当计算的表达式有精度要求时被使用。C#提供了两种浮点型:单精度浮点型(float)和双精度浮点型(double)。float类型表示32位的单精度浮点数,它的取值范围为±1.5e-45~±3.4e38。double类型表示64位的双精度浮点数,它的取值范围为      ±5.0e-324~±1.7e308。

float f = 100.1f;                //声明一个float型的变量f

5. decimal类型通常用来表示财务计算和货币计算。decimal类型表示128位的数值,取值范围为±1.0e-28~±7.9e28。书写decimal类型的值时,需要在数值后添加后缀m,否则编译出错。

decimal de = 100.123m;              //声明一个decimal型的变量de

与浮点型相比,decimal类型具有较高的精度,但取值范围较小。因此,从浮点型到decimal类型的转换可能会产生溢出异常,而从decimal类型到浮点型的转换则可能导致精度损失。正是由于这些原因,所以,在浮点型和decimal类型之间不存在隐式转换。如果要转换浮点型到decimal类型,则必须使用强制转换方法。

6. 布尔(bool)类型表示真或假值。它只包含两个值:true和false,而且这两个值意义恰好相反。因此bool类型的变量或者表达式只能取这两个值中的一个。布尔类型和其他类型之间不存在任何标准转换。

bool b = true;             //声明一个bool型的变量b

7. 枚举类型是为一组在逻辑上密不可分的整数值提供便于记忆的符号。它是把相同类型、表达固定含义的一组数据作为一个集合放到一起形成新的数据类型。

枚举类型也是一种值类型,它具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为byte、sbyte、short、ushort、int、uint、long或ulong。其中,默认的基础类型为int。枚举类型一般包含一个或多个枚举值,每一个枚举值之间用逗号(,)分隔。枚举值又称为枚举数,它的默认基础类型为int。默认情况下,第一个枚举数的值为0,后面的每一个枚举数的值依次增1。

声明一个名称为Week的枚举类型。

 enum Week  //声明一个枚举类型

 {

     Sunday = 0,

     Monday,

     Tuesday,

     Wednesday,

     Thursday,

     Friday,

     Saturday

 }

Week类型包含7个枚举数:Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday,分别表示星期中的每一天。Sunday枚举数的值为0,其他枚举数的值依次增1。在声明枚举时,如果为该枚举添加了位标记Flags,那么该枚举的枚举数可以按照位运算方法进行运算。

声明一个名称为File的枚举类型,并添加了位标记Flags。

 [Flags]

 enum File      //声明一个枚举类型

 {

     None = 0,

     Read = 1,

     Write = 2,

     Delete = 4

 }

File类型包含4个枚举数:None、Read、Write和Delete,分别表示对文件不具有访问权限、读权限、写权限和删除权限。None、Read、Write和Delete枚举数的值分别为0、1、2和4。

如果某用户对一个文件既具有读权限,又具有写权限了,可以把File枚举数进行位运算得到.

声明一个名称为x的、类型为File的变量。它的值由File枚举类型的Read和Write枚举数进行或运算得到。File x = File.Read | File.Write;

注意:由于File.Read和File.Write的值分别为1和2,那么x变量的值应该为3(“1|2”表达式的结果)。

8. 结构类型通常是一组相关信息组合成的单一实体。其中的每个信息称为它的一个成员。结构类型在创建如点结构等小型对象的时候很灵活。结构类型也是一种值类型,它可以声明常量、字段、方法、属性、索引器、运算符、实例构造函数、静态构造函数和嵌套类型。

9. 引用类型的变量又称为对象,可存储对实际数据的引用。将一个变量指定给另一个变量时,只是指定了引用,而不是值。

引用类型主要包括6种类型:对象类型、字符串类型、类类型、数组类型、接口类型和委托类型。引用类型继承自System.Object类。

注意:在使用引用类型的变量之前,往往要判断该变量的值是否为null。如果为null,则不能直接访问该变量

类是C#或者面向对象程序设计中最重要的组成部分,如果没有类,所有使用C#编写的程序都不能进行编译。由于类声明创建了新的引用类型,所以就生成了一个类类型。类类型中包含了数据、函数和嵌套类型。其中,数据成员包括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。特别地,类类型还支持一种被称为“继承”的机制。继承是指派生类可用来扩展和专门化基类的一种机制。

对象

object类型是C#内置的引用类型。在C#的统一类型系统中,所有类型都是直接或间接从object继承的。

因此,C#中的任何类型都可以转换为object类型

声明一个类型为object的、名称为o的变量,并赋值为10。

object o = 10;       //声明一个object类型的变量o

注意:object关键字仅仅是System.Object类的别名。

字符串

string类型也是C#内置的引用类型。字符串类型表示零个或更多Unicode字符组成的序列。字符串(string)类型是直接从object继承而来的类类型,它对应着.NET Framework中的System.String类型

声明一个类型为string的、名称为s的变量,并赋值为abc字符串。

string s = "abc";       //声明一个string类型的变量s并赋初值abcstring类的实例表示一串字符序列,即字符串。在书写字符串时,字符串要被双引号(")包围。

注意:string类的实例是不可修改的。即一个字符串一旦被创建之后,它不能被修改。

数组

数组是指同类型数据组成的集合,它是数据最常用的存储方式之一。C#中的数组可以通过计算索引来访问数组中的每一个元素。每一个元素的类型称为数组的元素类型。

声明一个名称为arr的、元素类型为int的数组。在声明数组时,元素类型之后要紧跟一个中括号([])。

int[] arr;                      //声明一个数组arr

接口

接口类型定义了一种标准。C#接口只有签名,没有实现代码。所以只能从接口衍生对象而不能对接口进行实例化。接口就相当于对象之间的协议一样,在调用接口时可以不关心接口具体实现方法。这样某个对象进行改变时,其他对象不用进行任何修改还可正常运行。接口是一个数据结构,能够声明数据成员和函数成员。其中,数据成员主要包括属性,函数成员包括方法和事件。

声明一个名称为Iinterface的接口。该接口声明了一个名称为Name的属性。

 interface Iinterface           //声明一个接口Iinterface

 {

     string Name

     {

         get;

         set;

     }

 }

注意:在接口中只能声明属性、方法和事件,而不能实现这些属性、方法和事件。接口只是一种协定。

实现某接口的类或结构必须遵守该接口定义的协定。

委托

委托类型的出现是为了弥补C#中去掉指针对灵活性带来的影响。委托是完全面向对象的,它把一个对象实例和方法进行了封装,所以委托是类型安全的。委托是一种数据结构,它能够引用一个或多个方法。对于实例方法,它还能够引用这些方法所对应的对象实例。委托类型能够将方法作为参数进行传递,并且还可以定义回调方法。

声明一个名称为MyFunction的委托。该委托指定的方法包含两个int类型的参数,且返回一个int的值。

delegate int MyFunction(int x,int y);      //声明一个委托MyFunction

装箱和拆箱

装箱和拆箱是C#的类型系统中两个很重要的概念,它在值类型和引用类型之间架起了一座桥梁。通过装箱和拆箱操作,可以将任何值类型的变量的值与引用类型的变量的值转换。可以将C#类型系统中的任何类型的值最终都可以按对象来处理。

装箱

引用类型总是分配在托管堆上,而值类型总是分配在堆栈上。装箱是指将值类型隐式转换为引用类型

对于值类型而言,装箱的具体过程:首先分配一个对象实例,然后将值类型的值复制到该实例中。

装箱前后不是同一个实例。对于引用类型而言,装箱前后都共享同一个实例。

首先声明一个类型为int的、名称为i的变量,并赋值为10。然后进行装箱,并将装箱后的引用赋值给变量o(类型为object)。即对“object o = i;”表达式进行一次装箱操作。

int i = 10;

object o = i;       //将int型的变量i隐式转换为引用类型并将其赋给object类型的变量o

在C#类型系统中,存在最为常见的4种装箱,具体如下:

从任何值类型(包括枚举类型)到object类型。

从任何值类型(包括枚举类型)到System.ValueType类型。

从任何值类型到值类型实现的任何接口类型。

从任何枚举类型到System.Enum类型。

拆箱

拆箱是指将引用类型隐式转换为值类型

拆箱的具体操作包括以下两个步骤。

(1)检查该对象实例是否为给定值类型的一个装了箱的值。

(2)将值从实例中复制出来。

首先声明一个类型为int的、名称为i的变量,并赋值为10。然后进行装箱,并将装箱后的引用赋值给变量o(类型为object)。即对“object o = i;”表达式进行一次装箱操作。最后,对o对象进行拆箱,强制转换为int类型,并赋值给j变量。即对“int j = (int)o;”表达式进行一次拆箱操作。

int i = 10;

object o = i;

int j = (int)o;            //将引用类型o转换为int型的的值并赋给int型的变量j

在C#类型系统中,存在最为常见的4种拆箱,

从object类型到任何值类型(包括枚举类型)。

从System.ValueType类型到任何值类型(包括枚举类型)。

从任何接口类型到实现了该接口类型的值类型。

从System.Enum类型到任何枚举类型。

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 

原创粉丝点击