C#之面向?qū)ο笞罱K篇

附加修飾符:

static

類成員: 類成員由static關(guān)鍵字修飾

特點(diǎn):可以在未創(chuàng)建類的對(duì)象前就用類名直接調(diào)用類成員

類變量:由static關(guān)鍵字修飾的字段

特點(diǎn):

隸屬于類模板(共用)

直接使用類名.訪問

注意:無法使用對(duì)象引用.

類方法:

由static關(guān)鍵字修飾的方法

特點(diǎn):

隸屬于類模板

直接使用類名.訪問

注意:

無法使用對(duì)象引用.

方法中不能使用this、base

靜態(tài)構(gòu)造函數(shù):(必須無參數(shù))

static 類名(){}

用處:初始化static變量

特點(diǎn):

每個(gè)類中都有此方法

不可被直接調(diào)用

使用類時(shí)自動(dòng)執(zhí)行(new 對(duì)象時(shí),訪問類方法)

運(yùn)行期間只執(zhí)行一次

知識(shí)點(diǎn):

一個(gè)類中包含什么內(nèi)容?

答:字段? ? // Class c1 = new Class()? c1.字段

? ? 成員方法? // public void Method()

? ? 構(gòu)造? ? new

? ? 析構(gòu)? ? ~ 垃圾回收前自動(dòng)調(diào)起

? ? 靜態(tài)方法? public static void Test

? ? 靜態(tài)字段? public static int data2

? ? 靜態(tài)構(gòu)造? 使用類立即使用

? ? 成員屬性? new 對(duì)象

? ? 成員變量 標(biāo)記對(duì)象的狀態(tài)

? ? 類屬性? ? public static int Data2{} 類名.

靜態(tài)類:

由static修飾的類

特點(diǎn):

不能實(shí)例化(沒有對(duì)象)

共享,

使用方式:類名.訪問內(nèi)容

原則:

靜態(tài)類中的所有成員必須是靜態(tài)的

\b:退格

示例:

public static class StaticTestClass

{

? ? ? public static int n = 0;

? ? ? public static void Add()

? ? ? {

? ? ? ? ? n++;

? ? ? }

}

類的加載次序

如圖所示:



一.多類的加載次序

1.優(yōu)先加載Main所在的類

2.執(zhí)行Main方法

3.執(zhí)行過程中使用到哪個(gè)類 加載哪個(gè)類

二.單個(gè)類的加載次序

1.加載類中的靜態(tài)變量 靜態(tài)方法

2.執(zhí)行靜態(tài)構(gòu)造為靜態(tài)變量進(jìn)行初期化

3.當(dāng)產(chǎn)生對(duì)象new對(duì)象時(shí) 分配成員變量和成員方法到對(duì)象中

注意:

非靜態(tài)的可以調(diào)用靜態(tài)和非靜態(tài)

靜態(tài)的只能調(diào)用靜態(tài)的

抽象(abstract)

抽象的意義:

描述抽象的概念,規(guī)定必須實(shí)現(xiàn)的方法的統(tǒng)一接口

抽象類:

用abstract關(guān)鍵字來修飾的類

abstract class AbstractClass

{

}

特點(diǎn):

必須被繼承才可使用

不能被直接實(shí)例化

和密封類(sealed類)正好相反

抽象方法:

用abstract來修飾的方法

abstract returnType AbstractMethod ( [paramlist] );

特點(diǎn):

必須被重寫(override)

只有方法頭,沒有方法體.

抽象方法必須在抽象類中.

規(guī)定:

1.抽象類中不一定包含抽象方法.

2.有抽象方法的類必定是抽象類.

3.抽象方法只是聲明,沒有方法的實(shí)現(xiàn).

4.構(gòu)造方法、類方法不能聲明為抽象方法.

5.子類必須實(shí)現(xiàn)抽象方法,除非子類也是抽象類.

6.抽象類中不一定全是抽象方法 可以有一部分具體實(shí)現(xiàn).

密封(sealed) 被sealed修飾的類被稱為密封類

sealed class SealedClass { }

特性:密封類不能被繼承 被sealed修飾的方法被稱為密封方法

sealed override returnType SealedMethod([paramList]) { }

特性: 密封方法會(huì)重寫基類中的方法 密封方法無法被重寫

注意:必須始終與override一起使用

被sealed修飾的屬性被稱為密封屬性

sealed override returnType Property { set? { } get { } }

特性: 密封屬性會(huì)覆蓋基類中的屬性 密封屬性無法被覆蓋

注意:必須始終與override一起使用



const&readonly

const :

定義的是靜態(tài)常量

聲明的同時(shí)賦值

運(yùn)行期間不能改變它的值

屬于編譯時(shí)常量

不能用new初始化

const一般修飾值類型和String

readonly :

是只讀變量

屬于運(yùn)行時(shí)變量

可以在類constructor里改變它的值

不能作用于局部變量

初始化時(shí)機(jī):

1.聲明的同時(shí)賦值

2.靜態(tài)變量的話 在靜態(tài)構(gòu)造中初始化

3.非靜態(tài)變量的話 在非靜態(tài)構(gòu)造中初始化

接口和索引器

什么是接口:

在構(gòu)建類的過程中,經(jīng)常會(huì)遇到一種特殊的情況,在描述某個(gè)類的各個(gè)方法時(shí),

對(duì)每個(gè)方法我們只能給出其功能實(shí)現(xiàn)的要求(原形聲明)但不能給出具體的功能實(shí)現(xiàn)(函數(shù)定義體)。

因?yàn)槲覀兯幚淼膯栴}只是一個(gè)泛泛的功能說明,并沒有針對(duì)某一具體類型的問題來說明。

例:

動(dòng)物吃:什么動(dòng)物吃?怎么吃?吃什么?只是個(gè)概念而已

動(dòng)物睡覺:站?躺?坐?睜眼?閉眼?只是個(gè)概念而已

接口:

一組只有成員方法聲明沒有方法體的方法集。

接口中可寫的內(nèi)容:

方法、屬性、索引器、事件

接口的作用:

提供了完全的抽象

規(guī)定類應(yīng)具有的形式

接口中的方法在多個(gè)實(shí)現(xiàn)接口的類中表現(xiàn)出多態(tài)性

便于設(shè)計(jì)、管理、協(xié)作項(xiàng)目

接口的定義:

要點(diǎn):類似于類的定義格式,只是以 interface作為定義符。

格式:

[訪問修飾符] interface 接口名

{

? ? 返回值類型 方法名([參數(shù)列表]);(只有聲明而無方法體)

}

或:

// 多繼承模式:

[訪問修飾符] interface 派生的接口名 : 父接口名列表

{

? ? 返回值類型 方法名([參數(shù)列表]);(只有聲明而無方法體)

}

注意事項(xiàng):

接口中聲明的方法都是默認(rèn)public的 不能自定義訪問級(jí)別

示例:

public interface Dispaly

{

? void ViewImage();

}

//實(shí)現(xiàn)接口

語法:

// 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口

class 類名 : 接口1,接口2,接口3,......(,分割)

{

???? // 所有接口定義方法的實(shí)現(xiàn)

}

// 一個(gè)接口可以被多個(gè)類實(shí)現(xiàn):

class 類1 : 接口1

{

?? // 接口定義方法的實(shí)現(xiàn)

}

class 類2 : 接口1

{

? // 接口定義方法的實(shí)現(xiàn)

}

class 類3 : 接口1

{

// 接口定義方法的實(shí)現(xiàn)

}

class 類4 : 接口1

{

? // 接口定義方法的實(shí)現(xiàn)

}

虛函數(shù):由Virtual修飾的函數(shù).

實(shí)現(xiàn)原則:

實(shí)現(xiàn)的方法必須與接口中的原型定義保持一致

必須實(shí)現(xiàn)接口中的所有成員方法

實(shí)現(xiàn)方式:隱式實(shí)現(xiàn)、顯式實(shí)現(xiàn)

隱式實(shí)現(xiàn):

interface Animal

{

? void Eat();

}

class Cat : Animal

{

? ? // 隱式實(shí)現(xiàn)在類中無法辨識(shí)該方法是那個(gè)接口的

? ? public void Eat()

? ? {


? ? }

}

顯式實(shí)現(xiàn):

interface Animal

{

void Sleep();

}

class Dog : Animal

{

// 顯式實(shí)現(xiàn)在類中明確方法是那個(gè)接口的,所有方法都是私有的

void Animal.Eat()

{

}

}

顯式\隱式的選擇:

若實(shí)現(xiàn)的所有方法均無重名,使用隱式

若實(shí)現(xiàn)的所有方法中出現(xiàn)重名,使用顯式

接口中的方法在實(shí)現(xiàn)類中呈現(xiàn)多態(tài)性:

接口回調(diào):接口引用=實(shí)現(xiàn)類對(duì)象

含義:

接口也是引用數(shù)據(jù)類型,可以指向任意實(shí)現(xiàn)了該接口的類實(shí)例

作用:

統(tǒng)一管理實(shí)現(xiàn)類對(duì)象

訪問顯式實(shí)現(xiàn)的方法

注意:

顯式實(shí)現(xiàn)的方法只能用接口回調(diào)來調(diào)用到

無法用實(shí)現(xiàn)類引用調(diào)用到

示例:

public interface IHello

{

void Bellow();

}

// 顯式接口實(shí)現(xiàn)

public class Speak : IHello

{

void IHello.Bellow()

{

Console.WriteLine("Hello");

}

}

class MainClass

{

public static void Main (string[] args)

{

Speak speak = new Speak();

//speak.Bellow() error

(speak as IHello).Bellow();// 不安全

? ? ? //原因:有可能出現(xiàn)空指針異常

IHello ih = speak as IHello;

if (ih != null)

{

ih.Bellow();//安全

}

}

}

抽象類和接口的區(qū)別:

1.接口用interface來定義,而不是class

2.接口不能創(chuàng)建實(shí)例,抽象類可以間接實(shí)例化(通過子類)

3.抽象的程度:接口完全抽象 抽象類部分抽象

4.接口采用多重繼承機(jī)制,類采用單一的繼承機(jī)制

索引器:

[訪問修飾符] 返回值類型 this[任意數(shù)據(jù)類型 index]{set{} get{}}

實(shí)質(zhì):方法的變異品種

作用:訪問方法從對(duì)象.方法名(參數(shù))=>對(duì)象[參數(shù)]

自定義索引器 VS 數(shù)組索引器:

(1)索引器的索引值(Index)類型不受限制

(2)索引器允許重載

(3)索引器不是一個(gè)變量

索引器 VS 屬性

(1)屬性以名稱來標(biāo)識(shí),索引器以函數(shù)形式標(biāo)識(shí)

(2)索引器可以被重載,屬性不可以

(3)索引器不能聲明為static,屬性可以

要聲明類或結(jié)構(gòu)上的索引器,請(qǐng)使用 this 關(guān)鍵字:

// Indexer declaration

// 最少有一個(gè)參數(shù)

public 數(shù)據(jù)類型 this[形參1,形參2......]

{

? // get and set accessors

get

{

}

set

{

// 使用隱參value接收實(shí)際參數(shù)

}

}

接口中聲明索引器的方法:

數(shù)據(jù)類型 this [【參數(shù)列表】最少有一個(gè)參數(shù)]{set;get;}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,719評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 1.一個(gè)人的時(shí)間和精力是有限的。不可能在一定的時(shí)間里,做成許許多多的事。所以,要取舍,要權(quán)衡。 懂得放下的人,一定...
    楚茨地閱讀 591評(píng)論 0 1
  • 20161031HR2備考 第三章 《培訓(xùn)與開發(fā)》 第一節(jié) 企業(yè)培訓(xùn)計(jì)劃設(shè)計(jì)與實(shí)施 一、培訓(xùn)規(guī)劃設(shè)計(jì) 1.培訓(xùn)規(guī)劃...
    銳博Reborn閱讀 213評(píng)論 0 1

友情鏈接更多精彩內(nèi)容