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

C#中的類定義

提問人:劉團圓發(fā)布時間:2020-12-07

C#使用class關鍵字來定義類:

class MyClass

{

    // Class members.

}

這段代碼定義了一個類MyClass定義了一個類后,就可以在項目中能訪問該定義的其他位置對該類進行實例化。默認情況下,類聲明為內部的,即只有當前項目中的代碼才能訪問它??墒褂胕nternal訪問修飾符關鍵字來顯式地指定這一點,如下所示(但這沒有必要):

internal class MyClass 

{

    // Class members.

}

另外,還可以指定類是公共的,可被其他項目中的代碼訪問。為此,要使用關鍵字public:

public class MyClass 

{

    // Class members.

)

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

public abstract class MyClass

{

    // Class members, may be abstract.

}

其中MyClass是一個公共抽象類,也可以是內部抽象類。

密封類的聲明如下所示:

public sealed class MyClass 

{

    // Class members.

}

與抽象類一樣,密封類也可以是公共的或內部的。

還可以在類定義中指定繼承。為此,要在類名的后面加上一個冒號,其后是基類名,例如:

public class MyClass : MyBase 

{

    // Class members.

}

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

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

public class MyBase 

{

    // Class members.

}

internal class MyClass : MyBase 

{

    // Class members.

}

但下述代碼不能編譯:

internal class MyBase

{

    // Class members.

}

public class MyClass : MyBase 

{

    // Class members.

)

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

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

例如,給MyClass添加一個接口,如下所示:

public class MyClass : IMylnterfaco 

{

    // Class members.

}

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

下面的聲明是無效的,因為基類MyBase不是繼承列表中的第一項:

public class MyClass : IMylnterface, MyBase 

{

    // Class members.

}

指定基類和接口的正確方式如下:

public class MyClass : MyBase, IMylnterface 

{

// Class members.

}

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

public class MyClass : MyBase, IMyInterface, IMySocondlntorface 

{

    // Class members.

}

下表列出了類定義中可以使用的訪問修飾符的組合。

修飾符

含義

無或 internal

只能在當前項目中訪問類

public

可以在任何地方訪問類

abstract internal abstract

類只能在當前項目中訪問,不能實例化,只能被繼承

public abstract

類可以在任何地方訪問,不能實例化,只能被繼承

sealed internal sealed

類只能在當前項目中訪問,不能被繼承,只能實例化

public sealed

類可以在任何地方訪問,不能被繼承,只能實例化

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

相關視頻回答
回復(0)
返回頂部