C#-【基礎5-面向對象、類的實例化、屬性、構造函數、命名空間、值類型、引用類型、繼承、里氏轉換】

【內容】

1.面向對象

對象:萬物皆對象,即對象就是可以看到、感覺到、聽到、觸摸到或聞到的東西。

術語:對象是一個自包含的實體,用一組可識別的特性和行爲來標識。

1.1類

類是具有相同屬性和功能的對象的抽象的集合。

類和對象:

(1)類是抽象的概念,僅僅是模板;

(2)類是不佔內存的,對象佔內存;

(3)類是對象的抽象,而對象是類的具體實例。

2.修飾符

private:私有成員,在類的內部纔可以訪問。

protected:保護成員,該類內部和集成類中可以訪問。

public:公共成員,完全公開,沒有訪問限制。

internal:當前程序集內可以訪問。

3.類的實例化(怎麼使用)

語法格式:

類 實例名 = new 類();

類成員的訪問:

實例名.屬性  實例名.方法();

字段、屬性、方法都可以叫做類的成員,他們需要定義訪問級別。訪問級別的用處在於控制成員在哪些地方可以被訪問,這樣達到面向對象中“封裝的目的。

4.屬性

屬性的定義:get;set;

屬性可分爲:讀寫、只讀、只寫;允許外部訪問的變量一定要聲明爲屬性。

屬性的讀寫

private string _name;

//訪問修飾符是private,那麼這個字段就是私有的,外邊不能訪問,可以通過屬性在外面或其他地方進行訪問

//屬性

public string Name

{

    get {  return _name; }     //讀

    set { _name = value; }   //寫

}

5.構造函數

解決了賦值麻煩的章程;在只讀狀態下,不能隨便賦值,使用構造函數來賦值。

構造函數是用來創建對象的特殊方法,方法名和類名一樣,沒有返回值,連void都不用。

舉例:(構造函數)

public Person(string name,char gender,int age)

{

    this._name = name;

    this._gender = gender;

    this._age = age;

}

構造函數給字段賦值:

Person per = new Person("小楊",'男',18);   //利用構造函數給裏面的字段賦值

per.Show();

Console.ReadKey();

另外,( Person per = new Person();

如果寫一個類沒有寫任何的構造函數,那麼這個類有個默認的無參數的構造函數;

若再寫一個有參的構造函數,則有參數構造函數將會覆蓋原來默認的無參構造函數。

6.命名空間

namespace(命名空間),用於解決類重名的問題,可以看做“類的文件夾”。

如果代碼和被使用的類在一個namespace則不需要using。

在不同命名空間下的類調用有兩種方法:

(1)寫全稱 命名空間.類名

(2)先using引用命名空間,再調用

如果一個項目中需要用到另一個項目中的類,需要先添加引用,再導入命名空間(或寫全稱)。

7.值類型和引用類型

值類型:將一個值類型變量賦給另一個值類型變量時,將複製包含的值。

引用類型:引用類型變量的賦值只複製對對象的引用,而不復制對象本身。

值類型不可能派生出新的類型:所有的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也可以實現接口。

其中,值類型不可能包含 null 值;每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

值類型和引用類型有哪些

引用類型:類、數組、棧上的地址、堆上的值

值類型:結構、棧上存的是值、Int、decimal、bool、double byte等基本數據類型、枚舉結構類型

類和結構

類:引用類型

值類型的值存在棧上,引用類型的棧上存的是地址,值存在堆上。

類中默認的有一個無參數的構造函數

當在類中寫一個有參數的構造函數,默認無參數的構造函數被覆蓋了。

類中寫構造函數參數列表中參數個數可以不確定。

結構:值類型

在結構中默認的也有一個無參數的構造函數

當在結構中寫一個有參數的構造函數,默認的無參數的構造函數還有,沒被覆蓋。

在結構中寫構造函數,要把所有的字段都要完全賦值。

堆和棧

棧:是編譯期間就分配好的內存空間,因此代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存中。

堆:是程序運行期間動態分配的內存空間,可以根據程序的運行情況確定要分配的堆內存的大小。

8.繼承

Public class Teacher : Person  //Teacher繼承了Person類

 Public class Student : Person  //Student同樣繼承了Person類

其中,

Person是父類(基類),Teacher、Student是子類(派生類)

子類繼承了父類的成員(屬性和方法),子類還可以有自己的成員。

在C#中,所有的類都直接或間接的繼承了object類。

9.里氏轉換

子類可以賦值給父類;

子類可以隱式的轉換成父類。

//如果new的時候,new的是子類,那麼再轉換這個子類是可以的

Person p = new Teacher();

Teacher t = (Teacher)p;

判斷

is用法

Person p = new Person();

If (p is Teacher)

{

    Teacher t = (Teacher)p;

    t.Say();

}

Else

{

    Console.WriteLine(“轉不了”);

}

Console.ReadKey();

As用法

Person p1 = new Person();

Teacher t1 = p1 as Teacher;

t1.Say();

is返回的是bool值, true就是能轉換,false就是不能轉換。

as也是轉換,如果轉換不了的不報異常,返回來爲null。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章