天天看點

C#枚舉、類、多态、接口 C# 多态性 C# 接口(Interface)

枚舉

enum  day {Mon, Tus,Wen,Thr,Fri,Sat,Sun };

int Weekdaystart=(int)day.Mon;

對象是類的執行個體。構成類的方法和變量成為類的成員。 當你定義一個類時,你定義了一個資料類型的藍圖。這實際上并沒有定義任何的資料,

但它定義了類的名稱意味着什麼,也就是說,類的對象由什麼組成及在這個對象上可執行什麼操作。

  • 通路辨別符 <access specifier> 指定了對類及其成員的通路規則。如果沒有指定,則使用預設的通路辨別符。類的預設通路辨別符是 internal,
  • 成員的預設通路辨別符是 private。
  • 如果要通路類的成員,你要使用點(.)運算符,點運算符連結了對象的名稱和成員的名稱。

成員函數和封裝

類的成員函數是一個在類定義中有它的定義或原型的函數,就像其他變量一樣。作為類的一個成員,它能在類的任何對象上操作,且能通路該對象的類的

所有成員。

成員變量是對象的屬性(從設計角度),且它們保持私有來實作封裝。這些變量隻能使用公共成員函數來通路。

C# 類的靜态成員

當我們聲明一個類成員為靜态時,意味着無論有多少個類的對象被建立,隻會有一個該靜态成員的副本。

關鍵字 static 意味着類中隻有一個該成員的執行個體。靜态變量用于定義常量,因為它們的值可以通過直接調用類而不需要建立類的執行個體來擷取。靜态變量可在成員函數或類的定義外部進行初始化。你也可以在類的定義内部初始化靜态變量。

C# 多态性

多态性意味着有多重形式。在面向對象程式設計範式中,多态性往往表現為"一個接口,多個功能"。

多态性可以是靜态的或動态的。在靜态多态性中,函數的響應是在編譯時發生的。在動态多态性中,函數的響應是在運作時發生的。

C#的靜态多态性包塊函數重載和運算符重載。

函數重載

您可以在同一個範圍内對相同的函數名有多個定義。函數的定義必須彼此不同,可以是參數清單中的參數類型不同,也可以是參數個數不同。

不能重載隻有傳回類型不同的函數聲明。

void print(int i)
      {
         Console.WriteLine("Printing int: {0}", i );
      }

      void print(double f)
      {
         Console.WriteLine("Printing float: {0}" , f);
      }      
Printdata p = new Printdata();
         // 調用 print 來列印整數
         p.print(5);
         // 調用 print 來列印浮點數
         p.print(500.263);      

動态多态性

C# 允許您使用關鍵字 abstract 建立抽象類,用于提供接口的部分類的實作。當一個派生類繼承自該抽象類時,實作即完成。抽象類包含抽象方法,

抽象方法可被派生類實作。派生類具有更專業的功能。

請注意,下面是有關抽象類的一些規則:

  • 您不能建立一個抽象類的執行個體。
  • 您不能在一個抽象類外部聲明一個抽象方法。
  • 通過在類定義前面放置關鍵字 sealed,可以将類聲明為密封類。當一個類被聲明為 sealed 時,它不能被繼承。抽象類不能被聲明為 sealed。

C# 接口(Interface)

接口定義了所有類繼承接口時應遵循的文法合同。接口定義了文法合同 "是什麼" 部分,派生類定義了文法合同 "怎麼做" 部分。

接口定義了屬性、方法和事件,這些都是接口的成員。接口隻包含了成員的聲明。成員的定義是派生類的責任。接口提供了派生類應遵循的标準結構。

接口使得實作接口的類或結構在形式上保持一緻。

抽象類在某種程度上與接口類似,但是,它們大多隻是用在當隻有少數方法由基類聲明由派生類實作時。

定義接口: MyInterface.cs

接口使用 interface 關鍵字聲明,它與類的聲明類似。接口聲明預設是 public 的。下面是一個接口聲明的執行個體:

interface IMyInterface
{
    void MethodToImplement();
}      

以上代碼定義了接口 IMyInterface。通常接口指令以 I 字母開頭,這個接口隻有一個方法 MethodToImplement(),沒有參數和傳回值,

當然我們可以安裝需求設定參數和傳回值。

值得注意的是,該方法并沒有具體的實作。

InterfaceImplementer 類實作了 IMyInterface 接口,接口的實作與類的繼承文法格式類似:

class InterfaceImplementer : IMyInterface      

繼承接口後,我們需要實作接口的方法 MethodToImplement() , 方法名必須與接口定義的方法名一緻。

接口繼承: InterfaceInheritance.cs

以下執行個體定義了兩個接口 IMyInterface 和 IParentInterface。

如果一個接口繼承其他接口,那麼實作類或結構就需要實作所有接口的成員。

以下執行個體 IMyInterface 繼承了 IParentInterface 接口,是以接口實作類必須實作 MethodToImplement() 和 ParentInterfaceMethod() 方法:

using System;

interface IParentInterface
{
    void ParentInterfaceMethod();
}

interface IMyInterface : IParentInterface
{
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
        iImp.ParentInterfaceMethod();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }

    public void ParentInterfaceMethod()
    {
        Console.WriteLine("ParentInterfaceMethod() called.");
    }
}      

執行個體輸出結果為:

MethodToImplement() called.
ParentInterfaceMethod() called.