C#入門經典―― 9.1 C#中的類定義

來源:互聯網
上載者:User

C#使用class關鍵字來定義類。其基本結構如下:

class MyClass

{

//類成員

}

定義一個類後,可以在項目中能訪問該定義的其他地方對該類進行執行個體化。在預設情況下,類聲明為內部的(internal),即只有當前項目中的代碼才能訪問他。可以用internal存取修飾詞顯式指定,但這是不必要的。另外,還可以指定類是公用的,則可以由其他項目中的代碼來訪問。為此,要使用關鍵字public。

pbulic 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 : IMyInterface

{

//Class members.

}

所有的介面成員都必須在支援該介面的類中實現,但如果不想使用給定的介面成員,可以提供一個"空"的執行方式(沒有函數代碼)。還可以把介面成員實現為抽象類別中的抽象成員。

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

public class MyClass : IMyInterface,MyBase

{

//Class members.

}

指定基類和介面的正確方式如下:

public class MyClass : MyBase,IMyInterface

{

//Class members.

}

還可以指定多個介面,所以下面的代碼是有效:

public class MyClass : MyBase,IMyInterface,IMySecondInterface

{

//Class members.

}

表9-1 是類定義中可以使用的存取修飾詞的組合。

修飾符

含義

無或internal

類只能在當前項目中訪問。

public

類可以任何地方訪問。

abstract或internal abstract

類只能在當前項目中訪問,不能執行個體化,只能繼承。

public abstract

類可以在任何地方訪問,不能執行個體化,只能繼承。

sealed 或internal sealed

類只能在當前項目中訪問,不能派生。

public sealed

類可以在任何地方訪問,不能派生。

 

聲明介面的方式與聲明類的方式相似,但使用的關鍵字是interface,而不是class,例如:

interface IMyInterface

{

//Interface members.

}

存取修飾詞關鍵字public和internal的使用方式是相同的,所以要使介面可以公開訪問,必須使用關鍵字public:

public interface IMyInterface

{

//Interface members.

}

關鍵字abstract和sealed不能在介面中使用,因為這兩個修飾符在介面定義中是沒有意義的。

介面的繼承也可以用與類繼承的類似方式來指定。主要的區別是可以使用多個基底介面,例如:

public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2

{

//Interface members.

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.