c 中的構造器,類的修飾符,虛方法,抽象類

2021-05-26 16:16:01 字數 3154 閱讀 4199

1. 構造器

知識點一:構造器從來都沒有返回值,其中不能包含return語句(一般的成員方法要在方法名稱前面加上void關鍵字,而構造器不用)

知識點二:類中的成員變數如果不對其進行初始化(即賦值),如果為int型的成員變數,則預設初始化為0,string在預設初始化為null

知識點三:類中的成員變數不賦值即可使用,而區域性變數必須賦初值後才可使用

知識點五:實際開發中帶引數的構造器中的引數名稱最好和成員變數名稱不同,如果相同必須加上this關鍵字加以區別,this.i代表成員變數,i代表是構造器中的引數

知識點六:如果在宣告成員變數時給成員變數賦了初值,且構造器的過載個數較多,會產生大量的**冗餘(可以通過mil檢視,有大量重複**)消除冗餘的方法:將成員變數在無參構造器中進行初始化,然後用有參構造器呼叫無參構造器,呼叫無參構造器的方法:在有參構造器的後面加上:this(),再通過mil檢視中間**,冗餘消失了。

例項**:

using system;

public a(int _i):this()//有引數的構造器,並呼叫無參構造器

public a(string _s):this()

}class test}}

知識點七:在類的繼承中,派生類在例項化時,先執行父類的無參構造器,才執行自己的構造器

知識點八:只有基類的無參構造器會被繼承,有參構造器不被繼承

知識點九:建立類時會自動生成乙個無引數的構造器,但如果定義了有引數的構造器,就不生成無引數的構造器了

知識點十:引用父類的構造器的方法::base(引數)

知識點十一:在乙個程式執行的過程中,靜態構造器最多執行一次;靜態構造器在類的靜態成員初始化後執行(或者講編譯器會將靜態成員初始化語句轉換成賦值語句放在靜態構造器執行的最開始);靜態構造器在任何類的靜態成員被引用之前執行;靜態構造器在任何類的例項變數被分配之前執行。

2.       類的修飾符

訪問修飾符

類內部子類

程式集內

程式集外

default

可以public

可以可以

可以可以

private

可以internal

可以可以

可以protected

可以可以

protected internal

可以可以

可以注意:關鍵字class前面如果沒有修飾符預設為internal,類的成員前面如果沒有修飾符預設為private

sealed訪問修飾符說明此類不能被繼承

3.       虛方法

使用虛方法的例項:

using system;

public employee(string name)

public virtual void startwork() //虛方法

}class manager : employee

//繼承父類的帶引數的構造方法

public override void startwork() //虛方法重寫

}class seller : employee

public override void startwork()

}class test}}

}4.      抽象類

知識點一:抽象類不能被例項化

知識點二:抽象類可以包含抽象方法和抽象訪問器

知識點三:抽象方法本質上就是乙個虛方法,用以實現多型

知識點四:不能用sealed修飾符修改抽象類,派生類必須全部實現抽象類定義的抽象方法和抽象訪問器

抽象方法:

1.       抽象方法是隱式的虛方法

2.       只允許在抽象類中使用抽象方法宣告

3.       因為抽象方法宣告不提供實際的實現,所以沒有方法體:方法宣告只是以乙個分好結束,並且在簽名後沒有大括號({}),實現由乙個重寫方法提供,此重寫方法是非抽象類的成員

4.       在抽象方法宣告中使用static或virtual修飾符是錯誤的

5.       除了在宣告和呼叫語法上不同外,抽象屬性的行為與抽象方法一樣

6.       在靜態屬性上使用abstract修飾符是錯誤的

7.       在派生類中,通過包括使用override修飾符的屬性宣告,可以重寫抽象的繼承屬性

抽象類的建構函式:

任何情況下,抽象類都不應進行例項化,因此,正確定義其建構函式就非常重要。確保抽象類功能的正確性和擴充套件性也很重要。下列準則有助於確保抽象類能夠正確的設計並在實現後可以按預期的方式工作。

1.       不要在抽象類中定義公共的或受保護的建構函式,具有public或protected internal可見性的建構函式用於能進行例項化的型別。任何情況下抽象型別不能例項化。

2.       應在抽象類中定義乙個受保護(protected)建構函式或內部(private)建構函式

3.       如果在抽象類中定義乙個受保護建構函式,則在建立派生類的例項時,基類可以執行初始化任務

抽象方法和虛方法的區別:

1.       抽象方法和虛方法的區別在於:虛方法有乙個實現部分,並為派生類提供了覆蓋該方法的選項,相反,抽象方法沒有提供實現部分,強制派生類覆蓋方法(否則派生類不能稱為具體類)

2.       abstract方法只能在抽象類中宣告,虛方法則不是

3.       abstract方法必須在派生類中重寫,而virtual則不必

4.       abstract方法不能宣告方法體,虛方法則可以

抽象類的例子:

using system;

protected employee(string name)

public abstract void startwork(); //虛方法

}class manager : employee

//繼承父類的帶引數的構造方法

public override void startwork() //虛方法重寫

}class seller : employee

public override void startwork()

}class test}}

}從以上**可以看到存在大量重複的**,因此此例項不適合用抽象類實現,這裡知識為了演示抽象類的用法

C 中的訪問修飾符 修飾符 類

版本visual studio 2010 主要參考 修飾符用於修改型別和型別成員的宣告 訪問修飾符 訪問級別 public 訪問不受限制 類內和任何類外中訪問 protected 可訪問域限定於類內或從該類派生的類內 類內和該類的派生類 internal 可訪問域限定於類所在的程式集內 該類所在程式...

C 的類修飾符和成員修飾符

一 類修飾符 類修飾符 public internal partial abstract sealed static new protected private protected internal 1 public 訪問不受限制的,所有的本程式集以及其他的程式集裡面的類都能夠訪問 2 intern...

c 類的修飾符

c 使用關鍵字class來定義類。其基本結構如下 class myclass 定義這樣乙個類後,就可以在能訪問該定義的工程的其他地方對該類進行例項化。預設情況下,類宣告為內部的,即只有當前工程中的 才能訪問它。可以用internal訪問修飾符關鍵字顯式指定,但這不是必須的,類在定義時預設為此型別的類...