鍍金池/ 教程/ C#/
循環(huán)
正則表達(dá)式
概述
委托
多態(tài)性
字符串
繼承
結(jié)構(gòu)體
集合
變量
不安全代碼
判斷
反射
異常處理
可空類型
方法
數(shù)據(jù)類型
命名空間
文件 I/O
類型轉(zhuǎn)換
屬性
程序結(jié)構(gòu)
事件
接口
預(yù)處理指令
運(yùn)算符
多線程
匿名方法
索引器
泛型
封裝
常量和文字
基本語法
特性
數(shù)組
環(huán)境配置
運(yùn)算符重載
枚舉

當(dāng)你定義一個類,你實際上定義的是一個數(shù)據(jù)類型的藍(lán)圖。實際上你并沒有定義任何數(shù)據(jù),但是它定義了類的名字意味著什么。也就是說,一個類的對象由一些可以在該類上進(jìn)行的操作構(gòu)成。對象是類的實例。構(gòu)成類的方法和變量被稱為類的成員。

定義一個類

一個類定義以關(guān)鍵字 class 開始,其后跟的是類的名稱;類的主體部分體由一對花括號括起來。以下是一個類定義的一般形式:

 class  class_name
{
   // 成員變量
    variable1;
    variable2;
   ...
    variableN;
   // 成員變量
    method1(parameter_list)
   {
      // 方法主體
   }
    method2(parameter_list)
   {
      // 方法主體
   }
   ...
    methodN(parameter_list)
   {
      // 方法主體
   }
}

筆記:

  • 訪問說明符的訪問成員的規(guī)則與類本身的訪問規(guī)則相同。如果沒有說明,則默認(rèn)訪問的類的類型為 internal 。對成員的默認(rèn)訪問類型是 private

  • 數(shù)據(jù)類型指定了變量的類型,如果有返回值的話,返回指定方法的數(shù)據(jù)類型。

  • 訪問類的成員,可以使用 "." 點運(yùn)算符。

  • 點運(yùn)算符連接的成員的名字和對象的名稱。

下面的例子說明了到目前為止對于概念的討論:

using System;
namespace BoxApplication
{
    class Box
    {
       public double length;  // box 的長度
       public double breadth; // box 的寬度
       public double height;  // box 的高度
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();   // 聲明 box1 為 box 類型
            Box Box2 = new Box();   // 聲明 box2 為 box 類型
            double volume = 0.0;    // 在這里存放 box 的體積

            // box 1 詳細(xì)數(shù)據(jù)
            Box1.height = 5.0;
            Box1.length = 6.0;
            Box1.breadth = 7.0;

            // box 2 詳細(xì)數(shù)據(jù)
            Box2.height = 10.0;
            Box2.length = 12.0;
            Box2.breadth = 13.0;

            // box 1 的體積
            volume = Box1.height * Box1.length * Box1.breadth;
            Console.WriteLine("Volume of Box1 : {0}",  volume);

            // box 2 的體積
            volume = Box2.height * Box2.length * Box2.breadth;
            Console.WriteLine("Volume of Box2 : {0}", volume);
            Console.ReadKey();
        }
    }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Volume of Box1 : 210
Volume of Box2 : 1560

成員函數(shù)和封裝

一個類的成員函數(shù)有其自己定義的或其原型寫在類體中。它可以操作該類的任何成員對象,并且可以訪問一個類的所有成員。

成員變量是一個對象的屬性(從設(shè)計的角度來看),他們都是私有(private)的以便實施封裝。這些變量只能被 public 成員函數(shù)訪問。

讓我們把上述那些概念來 set 和 get 一個類中不同的類成員的值:

using System;
namespace BoxApplication
{
   class Box
   {
      private double length;   // box 的長度
      private double breadth;  // box 的寬度
      private double height;   // box 的高度
      public void setLength( double len )
      {
         length = len;
      }

      public void setBreadth( double bre )
      {
         breadth = bre;
      }

      public void setHeight( double hei )
      {
         height = hei;
      }
      public double getVolume()
      {
         return length * breadth * height;
      }
   }
   class Boxtester
   {
      static void Main(string[] args)
      {
         Box Box1 = new Box();   // 將 Box1 聲明為 Box 類型
         Box Box2 = new Box();
         double volume;

         // 將 Box2 聲明為 Box 類型
         // box 1 詳細(xì)數(shù)據(jù)
         Box1.setLength(6.0);
         Box1.setBreadth(7.0);
         Box1.setHeight(5.0);

         // box 2 詳細(xì)數(shù)據(jù)
         Box2.setLength(12.0);
         Box2.setBreadth(13.0);
         Box2.setHeight(10.0);

         // box 1 的體積
         volume = Box1.getVolume();
         Console.WriteLine("Volume of Box1 : {0}" ,volume);

         // box 2 的體積
         volume = Box2.getVolume();
         Console.WriteLine("Volume of Box2 : {0}", volume);

         Console.ReadKey();
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Volume of Box1 : 210
Volume of Box2 : 1560

C# 構(gòu)造函數(shù)

一個類的構(gòu)造函數(shù)(constructor)是類的一種特殊的成員函數(shù),當(dāng)我們創(chuàng)建一個類的新的對象時執(zhí)行該函數(shù)。

構(gòu)造函數(shù)與類具有相同的名稱,但它沒有任何返回類型。下面的例子說明了構(gòu)造函數(shù)的概念:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 線段長度
      public Line()
      {
         Console.WriteLine("Object is being created");
      }

      public void setLength( double len )
      {
         length = len;
      }

      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    

         // 設(shè)置線段長度
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());
         Console.ReadKey();
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Object is being created
Length of line : 6

默認(rèn)構(gòu)造函數(shù)(default constructor)沒有任何的參數(shù),但是如果你需要,構(gòu)造函數(shù)是可以有參數(shù)的。這種構(gòu)造函數(shù)被稱為參數(shù)化的構(gòu)造函數(shù)(parameterized constructors)。這種技術(shù)有助于你在一個對象被創(chuàng)建時指定它的初始值,如下述示例:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 線段長度
      public Line(double len)  //參數(shù)化構(gòu)造函數(shù)
      {
         Console.WriteLine("Object is being created, length = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 

         // 設(shè)置線段長度
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 
         Console.ReadKey();
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Object is being created
Length of line : 6
Object is being deleted

C# 析構(gòu)函數(shù)

析構(gòu)函數(shù)(destructor)是類的一種特殊的成員函數(shù),當(dāng)類的對象在超出作用域時被執(zhí)行的一種成員函數(shù)。一個析構(gòu)函數(shù)的名稱是在其類名稱前加上一個前綴字符(~),它既不能返回一個值,也不能帶有任何參數(shù)。

析構(gòu)函數(shù)對退出程序前釋放內(nèi)存資源時非常有用。析構(gòu)函數(shù)不可以被繼承或重載。

下面的示例解釋了析構(gòu)函數(shù)的概念:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 線段長度
      public Line()  // 構(gòu)造函數(shù)
      {
         Console.WriteLine("Object is being created");
      }
      ~Line() //析構(gòu)函數(shù)
      {
         Console.WriteLine("Object is being deleted");
      }

      public void setLength( double len )
      {
         length = len;
      }

      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();

         // 設(shè)置線段長度
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());           
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Object is being created
Length of line : 6
Object is being deleted

C# 類的靜態(tài)成員

我們可以使用 static 關(guān)鍵字將類成員定義為靜態(tài)的。當(dāng)我們聲明一個類的靜態(tài)成員時,意味著無論有多少類的對象被創(chuàng)建,只有一個副本的靜態(tài)成員。

關(guān)鍵字 static 意味著一個類的成員只有一個實例存在。靜態(tài)變量被用于定義常數(shù),因為他們的值可以通過調(diào)用不創(chuàng)建實例的類而被檢索出來。靜態(tài)變量可以在成員函數(shù)或者類的定義以外的地方初始化。你也可以在類的定義中初始化靜態(tài)變量。

下面的示例論證了靜態(tài)變量(static variables)的使用:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num;
      public void count()
      {
         num++;
      }
      public int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s1 = new StaticVar();
         StaticVar s2 = new StaticVar();
         s1.count();
         s1.count();
         s1.count();
         s2.count();
         s2.count();
         s2.count();
         Console.WriteLine("Variable num for s1: {0}", s1.getNum());
         Console.WriteLine("Variable num for s2: {0}", s2.getNum());
         Console.ReadKey();
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Variable num for s1: 6
Variable num for s2: 6

你也可以聲明 static成員函數(shù)。此類函數(shù)只能訪問靜態(tài)變量。靜態(tài)函數(shù)的存在甚至先于創(chuàng)建對象。下面的示例論證了靜態(tài)函數(shù)(static functions)的用法:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num;
      public void count()
      {
         num++;
      }
      public static int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s = new StaticVar();
         s.count();
         s.count();
         s.count();
         Console.WriteLine("Variable num: {0}", StaticVar.getNum());
         Console.ReadKey();
      }
   }
}

編譯執(zhí)行上述代碼,得到如下結(jié)果:

Variable num: 3
上一篇:可空類型下一篇:委托