C#圖解教程筆記20170719

分部類和分部類型
每個局部聲明必須被表位partial class ,而不是單獨的關(guān)鍵字class兰英。

image.png


類和繼承

類繼承

通過繼承我們可以定義一個新類展融,新類納入一個已經(jīng)聲明的類進行擴展寞射。

  • 可以使用一個已經(jīng)存在的類作為新類的基礎(chǔ)渔工。已存在的類稱為基類(base class),新類稱為派生類(derived class)桥温。派生類成員的組成如下:
  • 自己聲明中的類引矩;
  • 基類的成員。
  • 要聲明一個派生類侵浸,需要在類名后加入基類規(guī)格說明旺韭。基類規(guī)格說明由冒號和后面跟著用作基類的名稱組成掏觉。派生類被描述為直接繼承自列出的基類区端。
  • 派生類被描述為擴展它的基類,因為它包含了基類的額成員澳腹,夾傷在它自己的聲明中的任何附加功能织盼。
  • 派生類不能刪除他所繼承的任何成員杨何。

例:

class OtherClass:SomeClass
 {
  ...
  }

繼承的成員可以被訪問,就像它們是派生類自己聲明的一樣沥邻。
所有類都派生自object類
object類是唯一的非派生類危虱,因為他是繼承層次結(jié)構(gòu)的基礎(chǔ)。

  • 一個類聲明的基類規(guī)格說明中只能有一個單獨的類唐全,稱為單繼承槽地;、
  • 雖然類只能直接繼承一個基類芦瘾,但繼承的層次沒有限制。

隱藏基類的成員
雖然派生類不能刪除它繼承的任何成員集畅,但可以隱藏它們近弟。

  • 聲明一個新的相同類型的成員,并使用相同的名稱挺智;
  • 聲明新的帶有相同簽名的函數(shù)成員祷愉,可以隱藏和掩蓋繼承的函數(shù)成員(簽名由名稱和參數(shù)列表組成,不包括返回類型)赦颇;
  • 使用new修飾符二鳄;
  • 也可以隱藏靜態(tài)成員。


    image.png

基類訪問
使用基類訪問表達(dá)式訪問隱藏的基類成員

Console.WriteLine(“{0}”媒怯,base.field1);
image.png

虛方法和覆寫方法
虛方法可以使基類的訪問“升至”派生類內(nèi)订讼。
使用基類引用調(diào)用派生類的方法,需滿足下列條件:

  • 派生類的方法和基類的方法有相同的簽名和返回類型扇苞;
  • 基類的方法使用virtual標(biāo)注
  • 派生類的方法使用override標(biāo)注

需注意:

  • 覆寫和被覆寫的方法必須有相同的可訪問性欺殿。
  • 不能覆寫static方法和非虛方法;
  • 方法鳖敷,屬性和索引以及稱為事件的另一種成員類型脖苏,它們都可以被聲明為virtual和override。

覆寫標(biāo)記為override的方法
當(dāng)使用對象基類部分的引用調(diào)用一個覆寫的方法是定踱,方法的調(diào)用被沿派生層次上溯執(zhí)行棍潘,一直到標(biāo)記為override的方法的最派生版本。
如果在更高的派生級別有該方法的其他聲明崖媚,但沒有被標(biāo)記為override亦歉,那么他們不會被調(diào)用。

訪問級別
public:共有成員至扰,所有的類鳍徽,包括程序集內(nèi)部的類和外部的類都可以自由地訪問成員;
private:私有成員的限制是最嚴(yán)格的敢课,private類成員只能被它自己的類的成員訪問阶祭,它不能被其它的類訪問绷杜,包括繼承它的類。嵌套在它的類中的類的成員可以訪問濒募。
protected:受保護成員鞭盟,如同private的訪問級別,但它允許派生自該類的類訪問該成員瑰剃。
internal:內(nèi)部成員齿诉,標(biāo)記為internal的成員對程序集內(nèi)部的所有類可見,但對程序集外部的類不可見晌姚。
protected internal:受保護內(nèi)部成員粤剧,對所有繼承該類的類以及所有程序集內(nèi)部的類可見。

抽象成員
抽象成員是被設(shè)計來被覆寫的函數(shù)成員挥唠,它有以下特征:

  • 它被用abstract修飾符標(biāo)記抵恋;
  • 他沒有實現(xiàn)代碼塊。
    注意:
  • 抽象方法必須在派生類中用相應(yīng)的方法覆寫宝磨,但不能把virtual修飾符附加到abstract修飾符弧关。
  • 派生類中抽象方法的實現(xiàn)必須指定override修飾符。
  • 抽象成員只能被聲明在抽象類中唤锉。

抽象類
抽象類只能被用作其他類的基類世囊。抽象類就是被設(shè)計來被繼承的。

  • 不能創(chuàng)建抽象類的實例
  • 抽象類使用abstract修飾符聲明窿祥。
  • 抽象類可以包含抽象成員株憾,但不是必須的
  • 抽象類自己可以派生自另一個抽象類。
  • 任何派生自抽象類的類必須使用override的關(guān)鍵字實現(xiàn)該類的所有抽象成員晒衩,除非派生類自己也是抽象類号胚。


    image.png

密封類

  • 密封類只能被用作獨立的類,它不能被用作基類浸遗。
  • 密封類使用sealead修飾符標(biāo)注猫胁。
sealed class MyClass
   {
           ...
    }

靜態(tài)類
靜態(tài)類用于分組不受實例數(shù)據(jù)影響的數(shù)據(jù)和函數(shù)。

  • 類本身必須標(biāo)記為static跛锌;
  • 類的所有成員必須是靜態(tài)的弃秆;
  • 類可以有一個靜態(tài)構(gòu)造函數(shù),但沒有實例構(gòu)造函數(shù)髓帽,不能創(chuàng)建該類的實例菠赚;
  • 不能繼承靜態(tài)類,它們是密封的郑藏;
    訪問靜態(tài)成員衡查,使用雷鳴和成員名。

擴展方法
擴展方法重要的需求如下:

  • 擴展方法必須被聲明為static必盖;
  • 擴展方法聲明所在的類也必須被聲明為static拌牲;擴展方法必須包含關(guān)鍵字this關(guān)鍵字this作為它的第一個參數(shù)類型俱饿,并在后面跟著她它所擴展的類的名稱,作為第一個參數(shù)的類型塌忽。
    extend 擴展
    sealed class MyData
    {
        private double D1, D2, D3;                      //字段
        public MyData(double d1,double d2,double d3)      //構(gòu)造函數(shù)
        {
            D1 = d1;D2 = d2;D3 = d3;
        }
        public double Sum()                             //方法
        {
            return D1 + D2 + D3;
        }
    }
    static class ExtendMyData                           //擴展的方法
    {
        public static double Average(this MyData md)
        {
            return md.Sum()/3;
        }
    }

    class Program
    {
        
        static void Main(string[] args)
        {
            MyData md = new MyData(3,4,5);              
            Console.WriteLine("Sum:{0}",md.Sum());
            Console.WriteLine("Average:{0}", md.Average());
            Console.ReadKey();
        }
    }

輸出結(jié)果:
Sum:12
Average:4


外部方法
外部方法是在聲明中沒有實現(xiàn)的方法拍埠。

  • 使用修飾符extern標(biāo)記,而且在類的聲明中沒有實現(xiàn)土居。它的實現(xiàn)被分號取代
public static extern int GetCurrentDirectory(int size,StringBuilder buf);
  • 聲明和實現(xiàn)的連接時依賴實現(xiàn)的枣购,但常常使用DllImport特性完成。

表達(dá)式和運算符

條件運算符是三元運算符
條件擦耀?表達(dá)式1(為true時):表達(dá)式2(為false時)

typeof運算符返回作為它的參數(shù)的任何類型的system.type對象棉圈。通過這個對象,可以得到類型的特征眷蜓。
typeof運算符是一元運算符
Type t=typeof(SomeClass)


語句

語句是描述一個類型或告訴程序去執(zhí)行一個動作的源代碼指令迄损。
三種主要語句

  • 聲明語句:聲明類型或變量的語句;
  • 嵌入語句:執(zhí)行動作或管理控制流的語句账磺;
  • 標(biāo)簽語句:控制可以跳轉(zhuǎn)到的語句;

條件執(zhí)行語句:

  • if
  • if···else
  • switch
    循環(huán)語句:
  • while
  • do
  • for
  • foreach
    跳轉(zhuǎn)語句
  • break
  • continue
  • return
  • goto
  • throw

跳轉(zhuǎn)語句
break 執(zhí)行跳出最內(nèi)層封裝的語句 退出當(dāng)前循環(huán)


            int x = 0;
            while (true)
            {
                x++;
                if (x > 5)
                    break;
                Console.WriteLine(x);
                
            }
            Console.ReadKey();

運行結(jié)果為:
1
2
3
4
5


continue 退出此前循壞執(zhí)行下一次循環(huán)

 for (int i = 0; i < 5; i++)
            {
                if (i<3)
                {
                    continue;     //回到循環(huán)開始處
                }
                Console.WriteLine(i);
            }
            Console.ReadKey();

運行結(jié)果為:
3
4


標(biāo)簽語句
標(biāo)簽語句形式:Identifier:Statement
標(biāo)簽語句的執(zhí)行完全如同標(biāo)簽不存在一樣痊远,并僅執(zhí)行Statement
部分垮抗。

  • 給語句增加一個標(biāo)簽允許控制從代碼的另一部分轉(zhuǎn)移到該語句。
  • 標(biāo)簽語句只允許在塊內(nèi)部碧聪。

標(biāo)簽語句標(biāo)識符不能是:

  • 在重疊范圍內(nèi)核另一個標(biāo)簽標(biāo)識符相同冒版。
  • 關(guān)鍵字。

標(biāo)簽語句的范圍是:

  • 它聲明所在的塊
  • 任何嵌套在該塊內(nèi)部的塊逞姿。
  • 從范圍內(nèi)部的任何位置辞嗡,代碼都能跳出到標(biāo)簽語句
  • 從外部代碼不能條魚到標(biāo)簽語句的塊

goto語句
goto語句無條件轉(zhuǎn)譯控制到一個標(biāo)簽語句。它的一般形式如下:

goto Identifier;

Identifier是標(biāo)簽語句滞造。
goto語句必須在標(biāo)簽語句的范圍之內(nèi)续室。


using語句
using語句幫助減少意外的運行時錯誤帶來的潛在問題,它整潔包裝了資源的使用谒养。

image.png

using語句隱式產(chǎn)生處置該資源的代碼挺狰。
它執(zhí)行下列內(nèi)容:

  • 分配資源;
  • 把Statement放進try塊买窟。
  • 創(chuàng)建資源的Dispose方法的調(diào)用丰泊,并把它放進finally塊。


    image.png

using語句的另一種形式


image.png

在這種形式中始绍,資源在using語句聲明之前聲明瞳购。

命名空間和程序集

編譯器接受源代碼文件并生成名稱為程序集的輸出文件。


image.png
image.png

using兩個編譯指令避免使用完全限定名:using命名空間指令亏推,using別名指令学赛。
using命名空間指令通知編譯器將要使用來自某個指定命名空間的類型年堆,然后可以繼續(xù)使用簡單類名而不必全路徑修飾它們。

using別名指令
using別名指令允許起一個別名給:

  • 命名空間
  • 命名空間的一個類型

程序集的結(jié)構(gòu)
程序集不包含本地代碼罢屈,而是公共中間代碼嘀韧。他還包含實時編譯器在運行時轉(zhuǎn)換cil到本機代碼的一切,包括對他所引用的其他程序集的引用缠捌。程序及的文件擴展名通常為.exe或.dll锄贷。
程序集四個主要部分

  • 程序集的清單
  • 程序集名稱標(biāo)識符
  • 組成程序集的文件列表
  • 一個指示程序集中內(nèi)容在哪里的地圖
  • 關(guān)于引用的其他程序集的信息
  • 類型元數(shù)據(jù)部分包含該程序集定義的所有類型的信息。這些信息包含關(guān)于每個類型要知道的所有中間代碼曼月。
  • CIL部分包含程序集的所有中間代碼谊却。
  • 資源部分是可選的,但可以包含圖形和語言資源哑芹。


    image.png

對于有多個模塊的程序集炎辨,一個文件是主要模塊,而其他是次要模塊

  • 主模塊含有程序集的清單和到次要模塊的引用
  • 次要模塊的文件名以擴展名.netmodule結(jié)尾
  • 多文件程序被視為一個單一單元聪姿。它們一起部署并一起定版碴萧。


    image.png

程序集標(biāo)識符
程序集標(biāo)識符有四個組成部分,它們一起唯一標(biāo)識了該程序集末购,如下所示

  • 簡單名:這只是不帶擴展名的文件名破喻。每個程序集都有一個簡單名。他也被稱為程序集名或友好名稱(friendly name)
  • 版本號:由四個句點分開的證書字符串組成盟榴,例如2.0.35.9
  • 文化信息:它是一個字符串曹质,有2~5個字符組成,代表一種語言或代表一個國家或地區(qū)擎场,例如en-US
  • 公匙:這個128字節(jié)字符串應(yīng)該是生產(chǎn)該程序集的公司唯一的


    image.png
image.png

強命名程序集
強命名程序集有一個唯一的數(shù)字簽名衣服與他羽德。強命名程序集比沒有強名稱的程序集更加安全,這是由于以下原因:

  • 強名稱唯一標(biāo)識了程序集迅办。沒有其他人能創(chuàng)建一個與之有相同名稱的程序集宅静,所以用戶可以確信改程序機來自于其生聲稱的來源。
  • 沒有CLR安全組件來捕獲更改站欺,帶強名稱的程序集的內(nèi)容不能被改變坏为。
    弱命名程序集是沒有被強命名的程序集。不安全的
    程序員不產(chǎn)生強名稱镊绪。編譯器產(chǎn)生他匀伏,接受關(guān)于程序集的細(xì)膩,并哈希這些信息以創(chuàng)建一個唯一的數(shù)據(jù)簽名依附到該程序集蝴韭。他在哈希處理中使用的信息如下:
  • 組成程序集的字節(jié)序列
  • 簡單名稱
  • 版本號
  • 文化信息
  • 公匙/私匙對
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末够颠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榄鉴,更是在濱河造成了極大的恐慌履磨,老刑警劉巖蛉抓,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剃诅,居然都是意外死亡巷送,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門矛辕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笑跛,“玉大人,你說我怎么就攤上這事聊品》甚澹” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵翻屈,是天一觀的道長陈哑。 經(jīng)常有香客問我,道長伸眶,這世上最難降的妖魔是什么惊窖? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮厘贼,結(jié)果婚禮上界酒,老公的妹妹穿的比我還像新娘。我一直安慰自己涂臣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布售担。 她就那樣靜靜地躺著赁遗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪族铆。 梳的紋絲不亂的頭發(fā)上岩四,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音哥攘,去河邊找鬼剖煌。 笑死,一個胖子當(dāng)著我的面吹牛逝淹,可吹牛的內(nèi)容都是我干的耕姊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼栅葡,長吁一口氣:“原來是場噩夢啊……” “哼茉兰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欣簇,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤规脸,失蹤者是張志新(化名)和其女友劉穎坯约,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莫鸭,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡闹丐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了被因。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卿拴。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖氏身,靈堂內(nèi)的尸體忽然破棺而出巍棱,到底是詐尸還是另有隱情,我是刑警寧澤蛋欣,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布航徙,位于F島的核電站,受9級特大地震影響陷虎,放射性物質(zhì)發(fā)生泄漏到踏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一尚猿、第九天 我趴在偏房一處隱蔽的房頂上張望窝稿。 院中可真熱鬧,春花似錦凿掂、人聲如沸伴榔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踪少。三九已至,卻和暖如春糠涛,著一層夾襖步出監(jiān)牢的瞬間援奢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工忍捡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留集漾,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓砸脊,卻偏偏與公主長得像具篇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凌埂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評論 1 51
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法栽连,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法秒紧,異常的語法绢陌,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • 第一部分 打好基礎(chǔ) Laying the Foundation 第一章 歡迎進入軟件構(gòu)建的世界 Welcome t...
    白樺葉閱讀 4,639評論 0 17
  • 人善被人欺,我覺得我做的就這樣了熔恢。觸到了我的底線脐湾,我也會發(fā)飆的,幸虧我家老二是女兒叙淌,終于看清你們這些人的嘴臉秤掌。每天...
    大小丫丫的媽媽閱讀 139評論 0 0
  • 看了一本小姑娘寫的高中生活闻鉴,我很想翻回去看看我的初中。記不得的很多茂洒,記下的有些片段孟岛,寫出來是因為好玩,還是因為有意...
    透明的灰閱讀 203評論 1 4