C#基礎知識點總結

来源:http://www.cnblogs.com/ITusk/archive/2016/06/11/5574773.html
-Advertisement-
Play Games

屬性:封裝了 一部分對象狀態的函數成員 事件:簡化對象狀態轉化處理的函數成員 C#不支持類的多繼承(與C++不同),但可同時實現多個介面 C#是一種類型安全的語言,即類型只能通過定義的協議進行交互,從而保證內部類型的一致化。 C#支持靜態類型化,在編譯時會執行靜態類型安全性檢查 C#依靠運行時環境來... ...


 

  1. 屬性:封裝了 一部分對象狀態的函數成員
  2. 事件:簡化對象狀態轉化處理的函數成員
  3. C#不支持類的多繼承(與C++不同),但可同時實現多個介面
  4. C#是一種類型安全的語言,即類型只能通過定義的協議進行交互,從而保證內部類型的一致化。
  5. C#支持靜態類型化,在編譯時會執行靜態類型安全性檢查
  6. C#依靠運行時環境來自動的記憶體管理(不同於C/C++等語言,優點:程式員不需要顯式的釋放對象分配的記憶體資源避免了因錯誤使用指針造成的錯誤 缺點:無法向非托管語言C/C++對系統進行低級控制,完全按照自己的想法管理記憶體)
  7. C#編譯器可以把一系列的.cs文件編譯為程式集,程式集是.Net中最小的打包和部署單元,程式集可以是一個可執行文件.exe,也可以是一個類庫文件.dll(相當於一個沒有入口的.exe)
  8. C#編譯器的名稱叫csc.exe在命令行調用CSC的命令如下:

    生成應用程式(.exe)

    csc filename.cs

    生成類庫文件(.dll)

    Csc /target:libarary filename.cs

  9. 標識符:程式員為類、方法、欄位、變數等選擇的名字

    標識符是由字母/下劃線開頭的Unicode字元組成的,C#標識符是區分大小寫的,通常約定參數、局部變數和私有欄位應該由小寫字母開頭,而其他標識符則應該由大寫字母開頭

  10. 關鍵字:又稱保留字,為編譯器預留的名稱,當使用關鍵字時需要在其前面加上@符號,如string @string

    註意:@不是標識符的一部分,@string和string表示的是同一個變數

  11. C#預定義類型:數值類型、字元串類型、bool類型
  12. C#中的所有類型都是類型的實例,值表示存儲位置的符號,變數表示它包含的值可能會不斷變化,常量則表示裡面的值總是表示同一個值
  13. 類型的隱式轉換:編譯器能保證轉換一定能夠成功

轉換過程中不會丟失信息

類型的顯式轉換條件與上面的相對

  1. C#中的類型可以分為:①值類型 ②引用類型③參數類型④指針類型
  2. 值類型:

    數值類型、bool類型、char類型、bool類型、enum類型、struct

    引用類型:

    字元串、介面、類、委托、數組

    引用類型和值類型的最大不同在於記憶體的分配方式:

    值類型:通常在當前執行線程的堆棧(stack)上分配記憶體

    引用類型:通常在托管堆(manage heap)上分配記憶體

  3. 值類型的變數或者常量的內容僅僅是一個值,值類型複製時複製的是這個值本身,引用類型又對象和對象的引用兩部分組成,引用類型的變數或常量裡面存的是一個包含值的對象的引用,複製時複製的僅僅是這個引用

    當一個引用類型被賦值為null時表示它不指向任何一個對象。

  4. 在C#中非零值除以零是無窮大,零除以零是NaN

    無窮大減去無窮大NaN

    各種int

    Int16àshort(16位)

    Int32àint(32位)

    Int64àlong(64位)

  5. float單精度類型,精度為5~6位(超出部分按照四捨五入規則捨去),占4個位元組的存儲空間

    double雙精度類型,精度為15~16位((超出部分按照四捨五入規則捨去)),占8個位元組的存儲空間(聲明的小數預設都是double類型)

    float和double內部都是基於2進位表示的,只有基於2表示的數值才能被精確的表示

    decimal(多用於金融的數據處理方面)內部是基於10表示,可以精確的表示大多數小數(但處理速度要比處理float和double慢)

  6. C#中bool類型能表示True和False,儘管這隻需要1位的存儲空間,單運行時卻要使用1個位元組的空間(因為位元組是處理器和運行時能有效處理的最小單位),為了避免不必要的空間浪費,.Net Framework的System。Collections命名空間下有專門的BitArray類,每個布爾值占1位的空間。
  7. 棧是存儲參數和局部變數的地方,堆是對象殘留的記憶體塊,堆上可以存儲靜態欄位、常量、
  8. C#中的參數傳遞:

    >1、值傳遞(預設的傳遞參數的方式):每次傳遞的是原值的副本,改變副本並不會影響原值

    >2引用傳遞:相當於給原變數的存儲空間起了一個別名,原值和複製後的變數訪問的是同一塊記憶體,通過改變副本會改變原變數的值

    註意:無論參數是值類型還是引用類型都可以按照引用傳遞

    引用傳參有可分為兩種:ref和out

    Ref:在聲明和調用時都要添加ref關鍵字

    Out 和 ref類似,除了:

    ref必須在使用前給變數賦值,而out不必,但out必須在函數結束前為其賦值

  9. 值是變數或常量表示的存儲位置,變數是表示存儲位置的符號,它包含的值可能發生變化,常量包含的自初始化後不再發生變化。
  10. 類型轉換

    隱式轉換髮生條件:

            編譯器能保證轉換總是能成功

    沒有信息在轉換過程中丟失

    顯式轉換髮生條件:

            編譯器不能保證轉換總是能成功

    信息在轉換過程有可能發生

  11. 明確賦值

<1> 局部變數在讀取錢必須明確賦值

<2> 當調用方法時必須提供函數的參數

<3>其它的所有變數(像欄位和數組元素)都自動在運行時別初始化(使用其類型的預設值)

 

所有引用類型的預設值:null

所有數值和枚舉類型的預設值:0

字元類型預設值:'\0'

布爾類型預設值: False

能夠使用default關鍵字來獲取其關鍵值

 

  1. C#中的屬性

    當使用自動屬性時,編譯器會在後臺產生私有欄位,該欄位名稱由編譯器生成,切不能被引用,如何希望屬性是只讀的,可以將set訪問器設置為private

     

    C#中的屬性訪問器在系統內部被編譯為get_xxx和set_XXX方法

  2. 索引器

    索引器為訪問類或結構體中的列表或字典提供了自然的訪問介面,索引器和屬性很相似,但索引器通過索引值而非屬性名訪問數據元素,簡化了對類中列表和字典的訪問。

     

    要實現索引器,首先定義一個名為this的屬性,將參數定義放在一對方括弧中,

    Public string this[int index]{

        Get{}

             Set{}

    }

索引器在系統內部被編譯為get_Item()和set_Item()的方法

 

  1. C#中new 和virtual的不同:

    當CIR遇到一個virtual 方法時,它會調用派生得最遠的實現並重寫virtual成員的實現。本例中Contact包含了派生得最遠的實現。

     

    如果重寫一個方法時沒有加上"override"關鍵字,則會報告一條警告消息。這時,可以加上"new"來消除警告。告知編譯器和其它編程人員,這個成員的隱藏不是無意的。

    從C#的角度來看,new關鍵字的主要作用在於:移除編譯器的警告。

     

    new在基類面前隱藏了派生類的重新聲明的成員。在這種情況下,不是調用派生得最遠的成員。相反,基類的成員會搜索繼承鏈,找到使用了new關鍵字的那個成員之前的成員,然後調用該成員。如果繼承鏈中只有兩個類,就會使用基類中的成員,感覺就像沒有在派生類中重寫那個成員。

     

  2. C#構造方法

    28.1、C#編譯器自動為沒有顯式提供構造方法的類生成構造函數,如果顯式指定構造函數將不再生成這個無參構造函數,對於結構體來說,這個無參構造函數是必須的,不能自己定義,其作用是用預設值來初始化每個欄位。

     

    28.2、類或結構體中的欄位按照初始化順序在構造方法執行執行欄位的初始化

     

    28.3 構造函數的重載

         在構造函數中可以通過this關鍵字調用所在類的其它構造函數,減少代碼重覆,此時被調用的構造函數先執行

    Eg:

    Public class test{

    Public test(string test){

    }

    Public test(string test,int test) :this(string test){

    }

    }

    關鍵字base和關鍵字this類似,它有兩個重要的目的:

            從子類訪問重載的基類方法成員

             調用基類的構造函數

28.4 構造方法和欄位的初始化順序

        (1) 從子類到基類 :初始化欄位à指定被調用基類的構造方法中的變數

        (2)從基類到子類:構造方法體自行

 

 

  1. 重載和解析:

    當重載被調用時,類型最明確的優先匹配,具體調用哪個重載是在編譯時確定,而不是在運行時決定

  2. 裝箱和拆箱

    裝箱:把數值類型實例轉換為引用類型實例

    拆箱:把引用類型實例轉換為數值類型實例

     

    裝箱和拆箱的本質是複製,裝箱是把值類型的實例複製到新的引用類型中,拆箱是把引用類型中的值複製到值類型的實例中。

  3. GetType()方法和TypeOf運算符

    C#的所有類型在編譯和運行時期都維護一個System.Type類的實例,有兩個方法可以獲得System.Type對象

  • 在類的實例上調用GetType()方法
  • 在類名上使用TypeOf運算符

    兩者不同在於,GetType在運行時賦值,而TypeOf運算符在編譯時賦值

  1. 訪問許可權修飾符
  • public:完全訪問許可權 ,枚舉類型成員或介面隱含的訪問許可權
  • internal:盡可訪問程式集和友元程式集,非嵌套類型(比如類)的預設訪問許可權

 

  • private:僅在類型內可見,類和結構體成員的預設訪問許可權
  • protected:僅在類中和子類中可見
  1. 介面
  • 介面的顯式實現

    當 實現多個介面時,有時成員標識會有衝突,這時可以顯式實現介面來 解決衝突

    Public Interface ITest{

    Void DoSomething();

    }

Public class Test:ITest{

ITest.DoSomething(){}//介面的顯式實現

}

註意:調用顯式實現的成員的唯一方法是將對象轉換為相應的介面

Test t = new Test();

(ITest)t.DoSomething();

 

  • 虛方法實現介面成員

    預設情況下,介面成員的實現都是隱式定義為sealed。為了能重載,必須在基類中標識為Virtual或abstract

     

    Public class Test:ITest{

    Public virtual void DoSomething(){}

    }

    註意:顯式實現的介面成員不能標識為virtual

     

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當IE瀏覽器遇到腳本錯誤時,在瀏覽器左下角會出現一個黃色圖標,點擊可以查看腳本錯誤的詳細信息,並不會有彈出的錯誤信息框。我們在用webBrowser編寫的程式打開網頁,遇到腳本有問題是,會彈出一個錯誤提示框,需要確認後才能夠進行執行。如果我們設計的程式是用來自動處理網頁的,那麼在出現這種情況時,程式 ...
  • 字母轉換成數字 byte[] array = new byte[1]; //定義一組數組array array = System.Text.Encoding.ASCII.GetBytes(string); //string轉換的字母 int asciicode = (short)(array[0]) ...
  • 變數定義中類型後帶一個問號,意思是這個數據類型是NullAble類型的。用於給變數設初值的時候,給變數(int類型)賦值為null,而不是0!例子: int? i = 3 等同於Nullable<int> i = new Nullable<int>(3);int?是泛型Nullable<int>的另 ...
  • 引言: 本人想自己個博客網站出來,技術路線是用ASN.NET MVC5+EF6(Code First)+ZUI+各種Jquery插件,有了這個想法之後就開始選擇UI,看了好多bootstrap的模板之後,發現即使你用了bootstrap還是要自己寫css樣式,都是自學的,前端真的很垃圾,在網上找了很... ...
  • 之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控制項來顯示的二進位流圖片,我現在想的是能 通過普通的<img id="xx" src="xx"/>這種形式來顯示我的二進位流圖片嗎?必須可以(◑▽◐),就是寫法稍微麻煩了一 ...
  • 推薦:http://www.cnblogs.com/roucheng/p/3521864.html ...
  • 在瞭解HTTP斷點續傳的原理之前,先來說說HTTP協議,HTTP協議是一種基於tcp的簡單協議,分為請求和回覆兩種。請求協議是由客戶機(瀏覽器)向伺服器(WEB SERVER)提交請求時發送報文的協議。回覆協議是由伺服器(web server),向客戶機(瀏覽器)回覆報文時的協議。請求和回覆協議都由 ...
  • 當頁面被提交請求第一個方法永遠是構造函數。您可以在構造函數裡面初始一些自定義屬性或對象,不過這時候因為頁面還沒有被完全初始化所以多少會有些限制。特別地,您需要使用HttpContext對象。當前可以使用的對象包括QueryString, Form以及Cookies集合,還有Cache對象。註意:在構 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...