程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中的接口和繼承多態

C#中的接口和繼承多態

編輯:關於C語言

上一節中我們學習到了構造函數,用來初始化一個對象的實例。同時在.Net Framework中,提供了析構函數用於清理對象。一般情況下不需要特別析構函數,系統會自動提供默認的析構函數來執行操作,清理不再需要的對象。

一、 靜態和實例類成員

屬性,方法和字段等成員是對象實例所特有的,此外還有靜態成員。例如靜態方法,屬性和字段。這些靜態的成員可以在類的不同實例之間共享。所以將他們可以看成是類的全局對象。靜態屬性和字段可以訪問獨立於任何對象實例的數據。在使用靜態成員時候,不需要實例化對象。

前面在應用控制台程序中用到很多的輸入和輸出,其實他們都是靜態方法。不需要實例化Console 和Convert就可以直接調用。如果嘗試實例化一個靜態方法或者類的話會引起操作失敗。

靜態類:平時我們都希望類只包含靜態成員,而且不能用於實例化對象,為此一種簡單的方法是使用靜態類,而不是把類的構造函數設置為私有。靜態類只有靜態成員,不需要構造函數的定義。因為靜態類是不允許實例化的。

二.接口

接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合,一但定義了接口,就在類中實現它,這樣類就支持接口中所指定的所有屬性和成員。

同時要注意的是,接口不能單獨存在,不能像實例化對象一樣實例化一個接口,接口不能包含實現其成員的任何代碼,而只能定義成員本身,實現過程必須在實現接口的類中實現。一個類可以支持多個接口,同時一個接口也可以在多個類中實現。

二、 繼承

繼承是OOP最重要的特性之一,任何類都可以從另一個類中繼承,但是每一個類只能繼承幾個基本類。被繼承的類叫做父類,繼承的類稱為子類。一個很重要的問題是,在繼承一個基類的時候,成員的訪問性成了一個很重要的問題。一個類從一個基類繼承後,就得到它的所有成員和屬性以及字段。現在看Student類繼承Person類後的情況:class Student : Person 表示Student類繼承Person類

class Person //Person類

{

public string name;

public string sex;

public int age;

public double weight;

public Person()//構造函數

{

name = "Lu xiaofeng";

sex = "man";

age = 22;

weight = 99;

}

public Person(string name, string sex, int age, double weight)

{

this.name = name;

this.sex = sex;

this.age = age;

this.weight = weight;

}//構造函數

public void Eat(double food)

{//方法,吃東西後體重增加

this.weight += food;

}

}

class Student : Person

{

public string school_name;

public double score;

public int grade;

public Student()

{

school_name = "csu";

score = 99;

grade = 1;

}

public void study(double hours)

{

this.weight -= hours;

}

}

class Student 繼承 Person後它所擁有的方法和屬性包括其父類的所有屬性和方法

現在來比較下一個Person類和一個Student類的區別。

Person man = new Person("lixiao", "woman", 11, 88);

Console.WriteLine(" Person方法和屬性");

Console.WriteLine("name={0},sex={1},age={2},weight={3}",

man.name, man.sex, man.age, man.weight);man.Eat(12);

Console.WriteLine("man.Eat(12);", man.weight);

Student Luxiaofeng = new Student();

Console.WriteLine("Student方法和屬性");

Console.WriteLine("Luxiaofeng.name={0},Luxiaofeng.sex={1},Luxiaofeng.age={2},Luxiaofeng.weight={3}",Luxiaofeng.name,Luxiaofeng.sex,Luxiaofeng.age,Luxiaofeng.weight); //調用父類的屬性

Console.WriteLine("Luxiaofeng.school_name={0},Luxiaofeng.score={1},Luxiaofeng.grade={2}",Luxiaofeng.school_name,Luxiaofeng.score,Luxiaofeng.grade);//自己的屬性

Console.WriteLine("Luxiaofeng.weight={0}", Luxiaofeng.weight);

Luxiaofeng.Eat(14);//調用父類的方法

Console.WriteLine("Luxiaofeng.weight={0}", Luxiaofeng.weight);

Luxiaofeng.study(18);//調用自己的方法

Console.WriteLine("Luxiaofeng.weight={0}", Luxiaofeng.weight);

輸出的結果如下:

總結下:

C#中的繼承符合下列規則:
  1、繼承是可傳遞的。如果C從B中派生,B又從A中派生,那麼C不僅繼承了B中聲明的成員,同樣也繼承了A中的成員。Object 類作為所有類的基類。
  2、派生類應當是對基類的擴展。派生類可以添加新的成員,但不能除去已經繼承的成員的定義。
  3派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。

4可以定義虛方法、虛屬性以及虛索引指示器,它的派生類能夠重載這些成員,從而實現類可以展示出多態性。

5派生類只能從一個類中繼承,可以通過接口現多重繼承。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved