首頁  >  文章  >  後端開發  >  C#入門經典學習階段小結(凌亂)

C#入門經典學習階段小結(凌亂)

php是最好的语言
php是最好的语言原創
2018-08-08 10:20:132888瀏覽

CLR: common language runtime(.net 公共語言運行庫)管理.net庫開發的所有應用程式的執行

CTS: common type system (通用類型系統)指定最基本類型有助於使用.NET Framework的各種語言之間進行互動操作
CIL:common intermediate language (通用中間語言) 編譯程式碼為該語言,CIL程式碼獨立於電腦、os、cpu的,由JIT編譯器使用建立所需的本機程式碼
JIT: just in time (CIL程式碼僅在需要時才編譯)
託管程式碼:將程式碼編譯為CIL,儲存在程式集中,再用JIT編譯器將它編譯為本機所需程式碼,也需要管理正在執行的用.NET Framework編寫的程式碼。

建立.NET應用程式所需步驟:
->使用C#寫應用程式碼
->把程式碼編譯成CIL,儲存在程式集中
->執行程式碼時,必須使用JIT編譯器將程式碼編譯為本機程式碼
->在託管的CLR環境下執行本機程式碼

重設vs c#development settings設定:錯誤1:為「CoffeeScript」[代碼5297] 導入設定時發生錯誤。

轉義序列例如用\“來轉義“雙引號,用\n是換行符的轉義序列
字串插入:如輸出Console.WriteLine($"{outline}") ;
運算子優先權: ,--用作前綴,(), ,-一元時,! ,~
*,/,%
,-
<<,>>
<,>,<=,>=
==,! =
&
^
|
&&
||
=,*=,/=,%=, =,-=,<<=,>> ;=,&=,^=,|=
,--用作後綴

C#的分支技術:三元運算符,if語句,switch語句
switch語句在C 中可以執行完一個case語句後再執行另一個case,但在C#中這樣做是非法的,每個case語句需要一個break中斷switch執行
          另外可以使用return語句,不僅中斷switch結構,也中斷目前函數的執行;也可以用goto語句
三種循環:do循環,while循環,for循環
循環的中斷指令:break,continue,return

使用checked設定溢位檢查上下文

枚舉:枚舉值轉換為其他型別,需要明確轉換

用replace("str1","str2"),取代函數,用str2取代字串中所有的str1
.Trim()指令,刪除空格,可以加上char數組定義刪除字符,測試程式碼時發現trim()出現問題,反而trim(mycahr),[]mychar={' '}

引用傳遞參數  ref關鍵字,改變呼叫的參數值,必須使用初始化之後的'非常量const'的變數。
或使用輸出參數  out關鍵字,可以使用未賦值的變量,函數使用out時必須將其視為尚未賦值。
static關鍵字定義全域變量,const定義全域常數

函數的簽章包含函數的名稱及其參數,不包含其傳回型別
委託:一種儲存函數引用的型別,不帶函數體,使用delegate關鍵字,委託聲明指定了一個返回類型和一個參數列表

類別:理解為車規劃圖紙,對象:理解為汽車本身。
類別決定了物件將要擁有的屬性和行為。
class progrem
{  //可以寫入欄位、函數、屬性、建構子。 。
   //字段:存儲數據     屬性:保護字段get set (對自動屬性進行保護的時候需要實例化)       函數:描述對象的行為     構造函數:初始化對象,給對象的每個屬性進行賦值
}

傳智播客基礎加強1:
    oop:
                封裝:
        --- >的功能封裝起來,但是對外提供了一個很簡單的使用介面。我們會使用就OK。
    繼承:
        --->減少了類別中的冗餘程式碼
        --->讓類別與類別產生了關係,為多態打下了基礎。
        特性:
            單根性:一個子類別只能有一個父類別
              1、子類別可以賦值給父類別
            2、如果父類別中安裝的是子類別對象,則可以將此父類別轉換為對應的子類別物件
           ---->類型,指示是否可以做這個轉換
                2、as:如果轉換成功,則返回對象,否則返回null
            作用:我們將是所有的子類別都可以針對父類別進行指導編程,寫出通用的程式碼,適應需求的不斷改變。
    多態:
        --->虛擬方法
            virtual override
          --->介面
            interface 

#    關鍵字
        new
            1、建立物件
                    - -->在開闢的堆空間中建立物件
                --->呼叫物件的建構子

          與人類相同的成員和隱藏父類別的成員(當子類別# this

            1、代表目前類別的物件
            2、所顯示的呼叫自己的建構子
   
2.呼叫父類別的成員

靜態建構子只能在下列情況下執行:
*建立包含靜態建構子的類別實例時
*存取包含靜態建構子的類別的靜態成員時

string和object是簡單的引用類型,數組是隱式的引用類型,創建的每個類別都是引用類型
編譯器不允許派生類別的可訪問性高於基類。
介面的指定必須放在基底類別繼承之後,用逗號隔開。
介面沒有關鍵字abstract和sealed(它們不包含實作程式碼,不能直接實例化,而且必須是可以繼承)。介面不是類,所以沒有繼承System.Object

system.Object包含的方法:
    Equals()   bool
    ReferenceEquals() bool:比較傳送給它的兩個對象,是不是同一個實例的引用

    ToString()   String:傳回對應於物件實例的字串

    MemberwiseClone()  object:建立一個新物件實例並複製成員,以複製該物件
   # GetType(建立一個新物件實例並複製成員,以複製該物件
Type   . :回傳物件類型(typeof運算子:可以把類別名稱轉換成System.Type物件)
    GetHashCode() int:傳回一個以壓縮形式表示物件狀態的值

建構函式初始化器,它把程式碼放在方法定義的冒號後面。例如可在衍生類別的建構函式定義中指定所使用的基底類別建構子。
    用base()關鍵字指定.NET實例化過程使用基底類別中具有指定參數的建構子

定義無法建立的類別:將其定義為靜態類,或將其所有的建構函數定義為私有。
    無法建立的類別可透過它們擁有的靜態成員來使用。

對於ArrayList集合,使用物件的Add()方法新增項目;

yield 迭代

封箱是將值類型轉換為System.Object類型,或轉換為由值類型實作的介面類型。拆箱則相反。
    作用:它允許在項目的類型是object的集合中使用值類型,其次,有一個內部機制允許在值類型上呼叫object方法。

is運算子: is 注意如果是一個值類型,而也是該類型,或者可以拆箱到該類型裡,則為true。

不能重載賦值運算符,例如=,也不能重載&&和||

#IComparable在要比較的物件的類別中實現,可以比較該物件和另一個物件:提供CompareTo(),int,接受一個物件
IComparer在一個單獨的類別中實現,可以比較任意兩個物件:提供Compare(),int,接受兩個物件
類別Comparer提供了ICompare介面的預設實作方式:Comparer.Default.Compare(one,two)。 CaseInsensitiveComparer類別:不區分大小寫

宣告可空型別:  int? nullableInt;     int?是System.Nullable的縮寫,更方便讀取

空白合併運算子??????與空白條件運算子?.可以在結果是null時候設定一個預設值:
        int? count=customer.order?.Count() ?? 0;
另外,空條件運算子的另一個用途是觸發事件。

協變、抗變:
    泛型型別參數定義為協變,加上out關鍵字,反之,抗變用in關鍵字

傳智播客:
1.導​​入命名空間
    命名空間就是類別的"資料夾"。類別就是"資料夾"中的檔案。需要匯入命名空間
    新增引用:
        如果我需要在一個專案中,請存取另一個專案中的某一個類別
          ->導入命名空間

2、靜態和非靜態
    靜態成員:被static修飾
    實例成員:不被static修飾
    靜態成員先於實例成員載入到記憶體中,只有創建了對象,才有實例成員。
    靜態類別中只能有靜態成員
    呼叫:
        靜態成員呼叫:
            實例名.實例成員;(實例就是我們的物件)
    何時使用靜態?
        ---->作為工具類,例如所有的擴充方法!都需要static
        ---->在整個專案中資源分享,正因為它是資源共享的,所以靜態成員必須等到整個專案都結束的時候
        才會被資源釋放。
        在我們的專案中盡可能使用的靜態成員。
        繼承是創造物件的過程。
3、設計模式
        ---->單例設計模式
            在整個程式中,我們必須確保物件必須是唯一的。
            實作:
                ---->第一步:建構函式私有化
  ---->第三步:宣告一個靜態函數,傳回全域唯一的物件
        範例:
           //第一步:建構子私有化
      ##                    InitializeComponent();
                }
#

            //第二部:宣告一個靜態的欄位用來儲存全域唯一的視窗物件
                  //第三步:透過一個靜態函數傳回一個全域唯一的對象
            public static Form2 GetSingle()
            {
      {
                    _single = new Form2();
                }#  ##            }
        ---->單純工廠設計模式
                        提示使用者分別的輸入兩個數字:
                再輸入運算子:傳回一個計算的父類,並呼叫方法以取得結果。
                Add Sub Cheng Chu
    建築產業最早應用在設計模式中
        1 2、招兵買馬
        3、標買地
        4、安排施工團隊開始施工
        5、賣樓  
        設計模式是用來專門解決一些特定的問題。
4、類別函式庫
    .dll文件,我們使用類別函式庫來幫助我們封裝一些常用的功能      
5、值型別與參考型別        
  與值類型:int double值型態:int n charaumocmal d ##    參考類型:string 陣列自訂類別介面委託 
    值類型的值儲存在記憶體的堆疊上,並引用類型的值儲存在堆疊中。
    堆疊上儲存資料的效率高於堆疊。
        
    值傳遞:以數值類型傳遞為參數傳遞,且將數值本身傳遞給數值。
        注意:
        ref可以將數值傳遞改為引用傳遞。
    引用傳遞:把引用類型的值當作參數傳遞,傳遞的是引用。


6、字串的學習
    重要功能:
        不變性,我們不管對字串做什麼操作,都會在記憶體中產生一塊新的實例。
        駐留池
        我們可以將一個字串視為char類型的唯讀數群組。
    GC:Garbage Collection垃圾回收    ,每隔一段時間,會掃描整個內存,發現,如果有的空間沒有被指向。則立即把它銷毀。       

    1.說明字串的不變性2.字串常數的「暫存池」特性。

    String 字串,字串可以看成字元陣列,不可變特性(透過for循環,修改string中的元素,失敗!)。
    屬性
        Length //取得字串中字元的數量。 」aA我你他」→5
    方法
        IsNullOrEmpty()    靜態方法,判斷為null或為」」(靜態方法)# )    小寫,必須接收回傳值。 (因為:字串的不變);
        ToUpper()   大寫。
        Equals()    比較兩個字串(位址/物件的狀態,而==則是比較物件參考)是否相同。忽略大小寫的比較,StringComparation.
            //對string型別而言,不管是等號或Equals比較的都是值本身。
            //Equals預設比較的是地址,但是我們在自己定義的類別中如果用到Equals,都會將Equals進行重寫,使之按照我們自己的需求進行比較
    對應的數據,返回-1.//面試題:統計一個字串中,”天安門」出現的次數。    
        LastIndexOf()    若找不到對應的數據,且返回-1
        Substring()    ////2個重載,擷取字串。
        Split()   //分割字串。
        Join()        靜態方法
        Replace()


#物件初始化器:使用非預設的建構函式/ 。

    合併物件、集合初始化器(適合LINQ技術一起使用)(編譯器為在集合初始化器中提供的每一項呼叫集合的Add()方法)


var關鍵字,隱式推理變數類型,可以是int、string、陣列(數字值從來不會被解釋為可空類型,除非是定義new int?[ ] )等等

    如果要在資料儲存物件中修改屬性的值,就不能使用匿名類型(因為定義為唯讀屬性)


dynamic關鍵字,動態變數類型,

可選參數,沒有預設值的參數不能放在有默認值參數的後面。

命名參數,參數順序任意且可選。但如果混合使用命名參數和位置參數,就必須包含所有的位置參數,其後是命名參數。

Lambda表達式:是一個委託,賦給一個委託類型的變數;解釋為表達式樹

    表現:  括號中的參數清單=>C#語句/{多行程式碼如果還不是void的委託,需要加return}

    LINQ框架包含一個泛型類,可用於封裝Lambda表達式,使用該類別的一種方式是提取用C#編寫的Lambda表達式,將它轉換為對應的SQL腳本

擴充方法Aggregate(),表示把一個累加器函數套用在集合中從開始到結束的每對元素。

傳智播客 基礎加強3:
    1、StringBuilder:進行大量字串操作的時候的工具。 String物件是不可變的。
        將StringBuilder轉換為String使用ToString();
        僅為拼接字串的工具,且多轉換為String
       *String sb=newString10)b=newString”( );//追加字串
        *sb.ToString();//ToString("x2"),表示轉換為16進制,且是兩位的。
        *sb.Insert();
        *sb.Replace();
        使用程式設計中的table:WWavi ToString());
    2、out:out參數著重在函數中傳回多個值;參數需求必須在方法的內部為其賦值
    3、ref參數:ref參數著重於將一個值帶澳函數中進行改變,再講改變後的值帶出去。 ref參數在函數內不使用賦值,函數外必須為ref參數賦值
    4、
    5、集合的學習:
        非泛型集合:
   # #        泛型集合:
            List:相對於數組,不需確定初始範圍
                 Count:取得集合中實際包含的元素的數量
                Add():將單一元素
              :插入一個元素
                InsertRange():插入集合
                Remove():移除指定的元素
                Remove            RemoveAt() :依下標移除元素
                RemoveRange():移除某一範圍內的元素
           ToList():陣列轉換成集合 

            Dictionary< ;Tkey,Tvalue>
    6、裝箱與拆箱:
        裝箱:值類型--->引用類型
        判斷是否發生了拆箱或裝箱,首先要判斷這兩種資料型態是否有繼承關係。
        裝箱的時候使用何種型式的箱,拆的時候就拿什麼型式拆掉。
    7、編碼格式:

        將字串是怎樣的形式儲存為二元。

            ascii 256
            6000 GB2312
      c    

            ISO
                Unicode
               utf-8
            出現亂碼的原因:我們儲存此文件的時候所採取的編碼跟著開啟此文件的時候所採取的編碼格式不一致。
            文字檔案:拖到txt中仍視為文字檔案。
                    .txt   .html   .ini        .xml##   ##            Create():建立
            Move():剪切
            Copy():複製
            Delete():刪除
           資料夾
            CreateDirectory:建立新的資料夾
            Delete:刪除
            Move:剪切
         路徑
Directory.GetFiles(@"E:\download", "*.avi")取得所有的.avi檔案
            GetDirectories()取得指定目錄下所有的資料夾##  的資料夾
    正規表示式 主要類別:Regex
        就是一個模板,而我們可以使用這個模板,並在一坨字串中找到我們想要的資料。
        注意:正規表示式是操作字串的。
        組成:
            限定符,且元字元,常用的表達式
        Match("字串","要提取的字串的正規表示式");
            (循環擷取所有):Regex.Matches()
        字串替換:Regex.Replace("字串", "正規"," 替換內容");
        . ?  匹配大量字元
        (?<名字>  )   的想法   11。11。11 。11111."
            貪婪: . 。 盡可能多的配對
            非貪婪:  . ? 。盡可能的少匹配,1個

樣式:批次設定要應用到控制項上的某些屬性
範本:在其基礎上設定控制項外觀的控制項 
觸發器:
要定義Tigger物件監視的屬性,應使用Trigger.Property屬性
    要定義何時啟動Trigger對象,應設定Trigger.Value屬性
 etter   要定義Trigger觸發的操作,應將Trigger.Setters屬性設為S物件的一個集合
動畫:透過故事板創建,storyboard物件包含在資源字典中,必須透過x:Key屬性來識別
    

    不含關鍵影格的時間軸:DoubleAnimation、PointAnimation和ColorAnimation


依賴屬性:輸入propdp 兩下Tab鍵,即可插入屬性範本

XML:可擴充的標記語言
    與HTML的差異:XML中的元素必須關閉! XML中元素的屬性必須以引號
    語法規格:標籤(Tag)、巢狀(Nest)、屬性。
            標籤(即元素Element)要閉合,屬性值要以「」包圍,標籤可以互相嵌套。
            在XML中是節點(Node)包含元素(Element)。
    大小寫敏感
    建立XML:DOM文檔物件模型
            XmlDocument doc=new XML使用XPath查詢XML:
             XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
    根節點 但是order .RemoveAll();可以,移除根節點下的所有子節點
            刪除子節點:ITems.RemoveChild(xn);
       At ;

ctrl K和S/X,快速鍵插入程式碼片段/外側程式碼,例如#region

委託delegate:使用委託把一個函數當作參數傳遞

        函數可以直接賦值給一個委託對象委託的簽章必須跟函數的簽章一樣(即回傳值與參數型別一致)

        DelSayHi del = SayHiChinese;//new DelSayHi(SayHiChinese);

    與委託 委託##            事件本身是安全的委託

定義事件:
        public delegate void delTest();  ##    註冊事件:    
        eventTest = new delTest(method1);

        eventTest在不知道將來要當執行的方法的特定程式碼時,可以先用一個委託變數來取代方法呼叫(委託的回傳值和參數清單要確定)

    事件的功能:
        事件的功能與委託變數一樣,只是功能上比委託變數有更多限制。
        例如:一、只能透過 =或-=來綁定方法,二、只能在類別內部呼叫(觸發)事件。

程式集的好處:
    程式中只引用必須的組件,減少程式的尺寸;
    組件可以封裝一些程式碼,只提供必要的存取介面。


第16章:
雲:只是運行在一個資料中心的大量商品化的電腦硬件,這個資料中心可以運行程序,儲存大量資料。
        具有彈性,即動態向上擴展的能力(例如增加記憶體和CPU)和/或動態向外擴展的能力(增加虛擬伺服器實例的數量)

雲端服務模式:

    1、基礎設施即服務(IaaS):要從作業系統開始向上負責。
    2、平台即服務(PaaS):值負責執行在所選作業系統上的程式及其相依性。
    3、軟體即服務(SaaS):透過網路存取的裝置上所使用的軟體程式或服務。

相關推薦:


【c#教學】C# 資料型別 



透過靜態局部變數看C,C ,C#,Java, PHP的特色

#

以上是C#入門經典學習階段小結(凌亂)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn