位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C#中的類(lèi)定義

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

C#使用class關(guān)鍵字來(lái)定義類(lèi):

class MyClass

{

    // Class members.

}

這段代碼定義了一個(gè)類(lèi)MyClass定義了一個(gè)類(lèi)后,就可以在項(xiàng)目中能訪問(wèn)該定義的其他位置對(duì)該類(lèi)進(jìn)行實(shí)例化。默認(rèn)情況下,類(lèi)聲明為內(nèi)部的,即只有當(dāng)前項(xiàng)目中的代碼才能訪問(wèn)它??墒褂胕nternal訪問(wèn)修飾符關(guān)鍵字來(lái)顯式地指定這一點(diǎn),如下所示(但這沒(méi)有必要):

internal class MyClass 

{

    // Class members.

}

另外,還可以指定類(lèi)是公共的,可被其他項(xiàng)目中的代碼訪問(wèn)。為此,要使用關(guān)鍵字public:

public class MyClass 

{

    // Class members.

)

除了這兩個(gè)訪問(wèn)修飾符關(guān)鍵字外,還可以指定類(lèi)是抽象的(不能實(shí)例化,只能繼承,可以有抽象成員)或密封的(sealed,不能繼承)。為此,可使用兩個(gè)互斥的關(guān)鍵字abstract或sealed。所以,必須使用下述方式聲明抽象類(lèi):

public abstract class MyClass

{

    // Class members, may be abstract.

}

其中MyClass是一個(gè)公共抽象類(lèi),也可以是內(nèi)部抽象類(lèi)。

密封類(lèi)的聲明如下所示:

public sealed class MyClass 

{

    // Class members.

}

與抽象類(lèi)一樣,密封類(lèi)也可以是公共的或內(nèi)部的。

還可以在類(lèi)定義中指定繼承。為此,要在類(lèi)名的后面加上一個(gè)冒號(hào),其后是基類(lèi)名,例如:

public class MyClass : MyBase 

{

    // Class members.

}

注意,在c#的類(lèi)定義中,只能有一個(gè)基類(lèi)。如果繼承了一個(gè)抽象類(lèi),就必須實(shí)現(xiàn)所繼承的所有抽象成員(除非派生類(lèi)也是抽象的)。

編譯器不允許派生類(lèi)的可訪問(wèn)性髙于基類(lèi)。也就是說(shuō),內(nèi)部類(lèi)可以繼承于一個(gè)公共基類(lèi),但公共類(lèi)不能繼承于一個(gè)內(nèi)部基類(lèi)。因此,下述代碼是合法的:

public class MyBase 

{

    // Class members.

}

internal class MyClass : MyBase 

{

    // Class members.

}

但下述代碼不能編譯:

internal class MyBase

{

    // Class members.

}

public class MyClass : MyBase 

{

    // Class members.

)

如果沒(méi)有使用基類(lèi),被定義的類(lèi)就只繼承于基類(lèi)System.Object(它在C#中的別名是object)。畢竟,在繼承層次結(jié)構(gòu)中,所有類(lèi)的根都是System.Object,稍后將詳細(xì)介紹這個(gè)基類(lèi)。

除了以這種方式指定基類(lèi)外,還可在冒號(hào)之后指定支持的接口。如果指定了基類(lèi),它必須緊跟在冒號(hào)的后面,之后才是指定的接口。如果未指定基類(lèi),接口就跟在冒號(hào)的后面。必須使用逗號(hào)來(lái)分隔基類(lèi)名(如果有基類(lèi)的話)和接口名。

例如,給MyClass添加一個(gè)接口,如下所示:

public class MyClass : IMylnterfaco 

{

    // Class members.

}

支持該接口的類(lèi)必須實(shí)現(xiàn)所有接口成員,但如果不想使用給定的接口成員,可以提供一種“空”的實(shí)現(xiàn)方式(沒(méi)有函數(shù)代碼)。還可以把接口成員實(shí)現(xiàn)為抽象類(lèi)中的抽象成員。

下面的聲明是無(wú)效的,因?yàn)榛?lèi)MyBase不是繼承列表中的第一項(xiàng):

public class MyClass : IMylnterface, MyBase 

{

    // Class members.

}

指定基類(lèi)和接口的正確方式如下:

public class MyClass : MyBase, IMylnterface 

{

// Class members.

}

可以指定多個(gè)接口,所以下列代碼也是有效的:

public class MyClass : MyBase, IMyInterface, IMySocondlntorface 

{

    // Class members.

}

下表列出了類(lèi)定義中可以使用的訪問(wèn)修飾符的組合。

修飾符

含義

無(wú)或 internal

只能在當(dāng)前項(xiàng)目中訪問(wèn)類(lèi)

public

可以在任何地方訪問(wèn)類(lèi)

abstract internal abstract

類(lèi)只能在當(dāng)前項(xiàng)目中訪問(wèn),不能實(shí)例化,只能被繼承

public abstract

類(lèi)可以在任何地方訪問(wèn),不能實(shí)例化,只能被繼承

sealed internal sealed

類(lèi)只能在當(dāng)前項(xiàng)目中訪問(wèn),不能被繼承,只能實(shí)例化

public sealed

類(lèi)可以在任何地方訪問(wèn),不能被繼承,只能實(shí)例化

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部