国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DotNET知識點總結四(筆記整合)

2019-11-14 16:18:50
字體:
來源:轉載
供稿:網友

1、枚舉:本質是類

  1. 如果為第一個枚舉賦了一個int值,那么后面的枚舉項依次遞增
  2. 可以將枚舉強轉成他所代表的int值
  3. C#的枚舉項都是常量(可以用Reflector查看literal的IL源碼
  4. 因為枚舉項都有對應的int值,所以Switch把他當成int看
  5. 不能定義方法、屬性、事件
  6. 多個枚舉有相同數值時,數值強轉時,會返回其中最后一個枚舉項

2、IEnumerable接口

  只要實現了該接口,就可以使用foreach進行遍歷。foreach循環的本質就是調用這個接口返回一個迭代器,調用迭代器的MoveNext()方法就可以實現循環。

  源碼:

{    IEnumerator GetEnumerator();   //返回一個迭代器}        public interface IEnumerator{    bool MoveNext();    object Current { get; }    void Reset();}

  以上不難看出:

  IEnumerable接口中主要包括GetEnumerable方法(獲取迭代器對象),MoveNext方法(檢查是否存在循環的下一個元素),GetCurrent方法(獲得當前循環到的元素)

3、集合

  基本概念

    集合就是能裝一堆東西的容器。主要分為非泛型集合泛型集合

    ArrayList——里面真正存儲數據的是一個Object[]數組,它對應的泛型是List<T>

    HashTable——非泛型的鍵值對集合,它對應的泛型是Dictionary<TKey,TValue>

  動態數組和泛型集合的不同點和優缺點:

 

      動態數組對元素沒有任何約束,想添加什么都可以。其根本原因是因為其內部存儲數據的是一個Object類型的數組。

      泛型集合是帶元素類型約束的集合(對添加里面的元素有一個約束)

      泛型集合避免了裝箱、拆箱操作帶來的性能損耗,在添加元素時參數類型進行檢查

  常用方法

    add(), AddRange(), Insert(), InsertRange(), remove(), removeAt()

    Reverse()——將集合中的元素反轉

4、哈希表

  內部機制:

    HashTable,鍵值對集合,其內部是一個結構體數組bucket[]。有三個東西:鍵、值、鍵的哈西碼

    數據主要存儲于:PRivate bucket[] buckets;

private struct bucket{    public object key;    public object val;    public int hash_coll;}

  存取操作:

    存儲的原理:下標是根據key的hash值算出來的。當我們向HashTable中Add元素時,元素儲存在HashTable的數組里的下標是根據添加的Key的hash值算出來的(但因為hash值取模數組長度,所以肯定不會超過當前數組長度)。

    每個對象算出來的Hashcode并不是唯一的。有可能出現多個對象的HashCode相同。解決機制:

      a、再次hash一次

      b、桶裝模式,將兩個相同hashcode的對象裝入統一個位置

      c、當新增時,HashTable里的容器數組已經滿了,則以數組的兩倍擴容

    取值原理:當我們從HashTable里取元素時(根據key來取),會根據key的hash值算出要取的元素的下標,并比較元素里的key和當前要找的key參數的hash值是否相等,同時還要比較兩個key的引用是否一致。如果都滿足,則確定找到要取的元素。

5、泛型集合

  引用名稱空間:System.Collections.Generic

  List<T>——T是存儲的類型

  Dictionary<K,V>

6、List<T>和ArrayList的性能比較

  ArrayList存值類型需要裝箱猜想,而存儲引用類型需要類型轉換,而List<T>很明顯不需要這些額外的開銷,高性能顯而易見

7、try語句塊的使用時機

  網絡操作(套接字),文件操作(IO相關),數據庫操作,除法操作(除數為0的時候),強制類型轉換操作

8、Windows Form程序相關文件

  designer.cs設計類和前臺兩個類是兄弟類的關系(partial)

9、Path類

  ChangeExtension(修改文件的后綴,“修改”支持字符串層面的,沒有真的給文件改名)

    Combine——將兩個路徑合成一個路徑【自動處理路徑分隔符的問題】

    GetDirectoryName——得到文件的路徑名

    GetExtension——得到文件的擴展名

    GetFileName——得到文件路徑的文件名部分

    GetFileNameWithoutExtension——得到去除擴展名的文件名

    GetFullPath——得到文件的全路徑,可以根據相對路徑獲得絕對路徑

    GetTempFileName——得到一個唯一的臨時文件名

    GetTempPath——得到臨時文件夾的路徑

    &hellip;………

10、操作文件夾、目錄

  Delete——刪除目錄【recursive表示是否遞歸刪除】

  Exists——判斷目錄是否存在

  move——移動

  GetDirectories+得到一個目錄下的子目錄

  GetFiles——得到一個目錄下的文件

  …………

11、操作文件

  File——操作文件、靜態類,對文件整體操作。拷貝、刪除。剪切等

  AppendAllText——將文本contents附加到文件path中【如果文件不存在,則創建】

  Exists——判斷文件path是否存在

  ReadAllLines——讀取文本文件到字符串數組中

  ReadAllText——讀取文本文件到字符串中

  WriteAllText——將文本contents保存到文件path中,會覆蓋舊內容

  Copy——文件拷貝【true表示當文件存在時“覆蓋 ”,如果不加true,文件存在時則報異常】

  Create——創建文件

  Delete——如果文件不存在則報錯

  DirectoryInfo——文件夾的一個“類”,用來描述一個文件夾對象

  GetParent——得到目錄的父目錄

  FileInfo——文件夾,用來描述一個文件夾對象

  需要注意:

    獲取當前exe文件執行的路徑用  Assembly.GetExecutingAssembly().Location  ,不要用Directory.GetCurrentDirectory() ,因為獲取的是程序當前工作目錄,這個路徑可能會變

    修改文本編碼通過GetEncoding獲得該編碼

12、文件流

  FileStream——任意類型

  StreamWriter——字符串寫

  StreamReader——字符串讀

13、using語句的本質

  本質是一個try{……}finally語句塊

  所有要使用Using關鍵字來釋放資源的類必須實現IDisposable接口

  Close執行了Dispose()并回收對象

  使用Using語句塊并不能抓住異常,因為Using里面只做了 try……finally操作,并沒有catch語句塊,所以在using語句塊中還要自己加上try……catch塊來捕捉異常

14、序列化與反序列化

  Serialization特性

  二進制格式化器

  序列化:二進制格式化器,將對象里的字段及值以“文本”的方式保存成文本

    [Serializable]

    BinaryFormatter類方法

      Serialize——對象graph序列化到stream中

      Deserialize——將對象從stream中發序列化,返回值為反序列化得到的對象

    序列化需要注意的:

      a、呀序列化的類型必須標記為:[Serializable]

      b、該類型的父類也必須標記為:[Serializable],反射的時候有一個參數必須是“是否尋找父類對象”

      c、該類型中的所有成員的類型也必須標記為:[Serializable]

      d、序列化只會對類中的字段序列號(只能序列化一些狀態信息)

  反序列化:二進制格式化器,先創建一個相同的對象,然后見“文本”里保存的字段的值設置到字段中。按照文本(字段、字段值、類名)信息里的類名,使用反射技術創建新對象,并將對一個字段的值設置到新的對象中


上一篇:Linq&amp;lamda相關

下一篇:接口相關

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴彦淖尔市| 藁城市| 天峻县| 静安区| 资阳市| 玛曲县| 噶尔县| 黄浦区| 新蔡县| 嵩明县| 广西| 平定县| 嵩明县| 天峻县| 上林县| 湖州市| 中西区| 永德县| 铜山县| 安化县| 松桃| 仙桃市| 交口县| 沙坪坝区| 密山市| 遵义县| 区。| 嵩明县| 毕节市| 忻城县| 霍城县| 曲麻莱县| 盐池县| 潞城市| 合山市| 页游| 龙海市| 双流县| 麻江县| 河源市| 麻江县|