日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

(教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)...

發布時間:2023/11/30 C# 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

???????本節課我們來學習類的擴展分類,看我的標題中就羅列出了類的分類,類按照聲明方式和功能定義共分為這六種類,實例類就是我們一直在用的類,class關鍵字前沒有其他的修飾符,之前已經有很多實例類的使用方法了,我們今天主要是學習其他五種類。

?????靜態類


?

???? 靜態類就是在class關鍵字前加入了static關鍵字,基本語法是static? Class? ClassName{} 。

靜態類有幾個特點:

1.靜態類只能包括靜態成員

2.類本身無法被實例化,也就是不能創建靜態類的對象

3.靜態類無法被繼承

4.無法包含實例構造方法

所以我們在創建靜態類的時候,必須注意到以上四點,下面的實例是簡單的靜態類的使用。

靜態類實例
?1?class?Program
?2????{
?3????????static?void?Main(string[]?args)
?4????????{
?5????????????//靜態類不能被實例化,因為靜態類中的成員都是靜態的,調用靜態類中的成員使用類名引用。
?6???????????????Console?.WriteLine?(??StaticClass.a);?
?7????????}

?8????}

?9?????//定義一個靜態類名字叫做StaticClass
10????static?class?StaticClass
11????????{
12????????//定義一個靜態成員
13???????public??static?int?a=2;????
14????????}

結果就是2.

? 靜態類所提供的數據成員和方法成員具有唯一性,就如同使用了全局變量,所以比較適合封裝公用的成員。

結構


?

????? 在c#中也有結構,結果就是幾個數據組成的數據結構,通常用來封裝小型相關變量組,結構也可以看成是種輕量級的類,它的行為與類相似,但是不支持復雜的類功能,例如:繼承。在結構中也可以創建各種成員,比如:構造方法、常數、字段、方法、屬性、索引器、運算符、事件、嵌套類型等,但是如果往一個結構中放入比較復雜的成員,對與結構來說就和類沒有區別了,也就是失去了結構的特點,這時應該用創建類來代替創建結構。結構的基本語法是 public struct StructName{} 。

結構在MSDN上的概述:

結構是值類型,而類是引用類型。

與類不同,結構的實例化可以不使用 new 運算符。

結構可以聲明構造函數,但它們必須帶參數。

一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。所有結構都直接繼承自 System.ValueType,后者繼承自 System.Object

結構可以實現接口。

結構的副本由編譯器自動創建和銷毀,因此不需要使用默認構造函數和析構函數。

在結構聲明中,除非字段被聲明為 const 或 static,否則無法初始化。

?

????? 創建結構對象的時候不需要使用new關鍵字,由于直接存儲對象數據、省略了對象引用的步驟,同時也就提升了使用性能,這就是使用結構的好處。結構同樣具有自己專門的默認構造方法,它會自動引用,當然我們也可以創建自定義的構造方法,而此時就需要使用new關鍵字,引用這個構造方法了。看下面的代碼:

?

結構體實例
?1?class?Program
?2????{
?3????????static?void?Main(string[]?args)
?4????????{
?5????????????//創建結構對象,不必使用new關鍵字
?6????????????StructName?structobj;
?7????????????structobj.kuan?=?3;
?8????????????structobj.chang?=?5;
?9??????????Console?.WriteLine?("面積是"+??structobj.Getmj());
10
11????????????//使用結構體的構造方法,必須使用和類創建對象的方法相同new
12??????????StructName?structobj1?=?new?StructName(4,6);
13????????}

14????}

15?????//定義一個靜態類名字叫做StructName
16????public?struct?StructName
17????????{
18????????public?int?chang;
19????????public?int?kuan;
20????????public??int?Getmj()
21????????{
22????????????return?chang?*?kuan;
23????????}

24
25?????//結構體的構造函數
26????????public?StructName(int?chang1,?int?kuan1)
27????????{
28???????????chang?=?chang1;
29????????????kuan?=?kuan1;
30????????????Console.WriteLine("使用構造方法的面積是"?+?chang1?*kuan1);
31????????}

32????????}

?結果:

面積是15
使用構造方法的面積是24。

????? 因為結構聲明時無法初始化,所以在使用new創建結構對象時,必須在定義結構的有參構造方法,給結構中的已定義的無初值的變量賦一個值,否則就會報錯,如程序的第28、29行。大家可以試一試如果是在類的有參構造方法中,即使沒有28、29行,也能正常的編譯出結果。

?? 嵌套類


???????? 在類一系列中,我也提到過類成員中還包括一中嵌套類,其實嵌套類就是類中的一個類,由于嵌套類在類的內部,屬于外部類的內部成員,所以外部類的private訪問權限對內部類是無效的,也就是說,內部類可以使用外部類的任何成員,創建嵌套類insideClassName的基本語法如下:

?

?????? Class? outclassName

???? {

?????public? class insideclassName??????????

?????????? {

??????????? }

??? }

????? 當外部程序代碼要訪問嵌套類的時候,必須引用外層類的名稱像引出外部類的其他靜態成員一樣使用類名加運算符“.”的方式,創建嵌套類的對象具體語法如下:

??????? outclassName.insideclassName?? obj=new??outclassName.insideclassName();

??????? 如果再用嵌套類的對象時,再使用obj.的方式引用出,我們來看下面的例子:

?

嵌套類實例
?1namespace?hello
?2{
?3????class?program
?4????{
?5????????static?void?Main(string[]?args)
?6????????{
?7????????????//創建內部類的實例,必須把內部類作為靜態成員,使用外部類名來引用
?8????????????//而使用外部類的實例成員,必須使用外部類的對象來引用
?9????????????outclassName.insideclassName?i?=?new?outclassName.insideclassName();
10
11????????????//用內部類的對象引用出內部類的實例成員(方法say())
12????????????i.say();
13????????}

14????}

15????//定義一個外部類
16????class?outclassName
17????{
18????????//定義一個外部類的變量s,它的訪問權限是私有的。
19???????string?s?=?"我是外部類的變量s";
20????????//定義一個內部類,因為它是外部類中的一個類成員,在第三方類(Program)中,
21????????//要想調用這個類中,就必須加上public,和其他外部類的公用方法一樣。
22???????public?class?insideclassName
23????????{
24????????????//創建一個外部類的對象o,用于便于內部類訪問外部類成員。
25????????????outclassName?o?=?new?outclassName();
26????????????//定義一個內部類的方法say
27????????????public?void?say()
28????????????{
29????????????????//調用外部類中的字段s,使用外部類的對象o來引用,而且s的訪問權限不必是public。
30????????????????Console.WriteLine("用內部的方法調出外部的變量"+o.s);
31????????????}

32????????}

33????}

34???
35}

?結果就是:

用內部的方法調出外部的變量我是外部類的變量s
請按任意鍵繼續. . .

??????? 使用嵌套類注意:嵌套類要想被其他類訪問到,必須像外部類的一個公用成員一樣,要加public修飾符;創建嵌套類的對象時,要用外部類的類名來調用,這有點像把內部的嵌套類作為外部類的一個靜態成員來使用;嵌套類要想使用外部類的成員,也是需要創建用外部類名(.靜態成員)或是外部類的對象(.實例成員)來調用,唯一與兩個并列類訪問不同的是,嵌套類可以調用外部類的私有成員(private修飾),而并列類只能用公有成員(public修飾)。

?????? 下面我們要來學習最后兩個類,這兩個類我在標題的時候注明了是簡單的抽象類和簡單的密封類,原因就是這兩個類都是面向對象語言相對面向過程的一大進步,他們利用了面向對象的繼承性,要想學懂這兩個類必須在學到繼承后,再相信的講解,這里我只是把他們的大體定義和基本結構寫明,具體的應用我會在學習繼承的時候,著重講解。

抽象類


?????? 在實際項目中,我們定義一個抽象類主要是為派生類提供可共享的基類的公共定義,抽象類中可以包括抽象成員,抽象成員就是沒有實現,只有成員的定義,抽象成員具體由繼承這個包含抽象成員的抽象類的子類中的成員來實現。是不是很難理解呢?沒關系!同學們,現在我們只需要記住因為一個類中有了沒有實現的抽象成員,所以把這個類也定義為抽象類,也就是說,抽象成員一定在抽象類中,但是抽象類中可以沒有抽象成員,抽象類的和抽象成員都需要加入關鍵字abstract,下面我們來一定一個抽象類,并且這個抽象類中包括一個抽象方法,大家先記住他們的基本語法,日后我會詳細講解。???

抽象方法的基本語法
1????//定義一個抽象類abstractclassName
2????abstract?class?abstractclassName
3????{
4????????//定義一個抽象方法abstractMethods
5????????abstract?public?void?abstractMethods();
6????}

7???

????? 使用抽象類還要記住二點,一:因為抽象類中有可能存在抽象成員,也就是存在沒有實現的成員,所以抽象類無法被實例化,也就是無法創建類的實例對象;二:定義抽象成員的時候,為了讓繼承的子類能夠實現這個抽象方法,也就必須把抽象的成員定義成公有、或受保護的成員,這樣在抽象類的外部才能訪問到這個抽象成員。

密封類


?

???? 密封類的定義是通過sealed關鍵字來實現的,密封類可以用來限制擴展性,我也聽過把密封類叫成太監類的說法,很形象的說明了密封類的特點,就是沒有子類,也就是密封類無法被繼承,這一點和靜態類一樣,下面來看看密封類的基本語法:

?sealed class sealedclassName
??? {

??????? 類的主體;
??? }

??? 密封類除了不能被繼承,其他的用法和實例類基本一致,可以有多個構造方法,可以有靜態的、也可以有實例的,類的成員也是可以有靜態的和實例的。所以就不再演示密封類的用法了,對于密封類來說,它與面向對象編程技術的靈活性和擴展性是相抵觸的,所以通常情況下,不建議定義密碼類。

??? 本節課就講到這里,下一節我們要來學習類六:索引器

?

轉載于:https://www.cnblogs.com/wangfang224120999/archive/2008/12/14/1354374.html

總結

以上是生活随笔為你收集整理的(教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。