程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 《CLR.via.C#第三版》第二部分第4,5章節讀書筆記(二),

《CLR.via.C#第三版》第二部分第4,5章節讀書筆記(二),

編輯:C#入門知識

《CLR.via.C#第三版》第二部分第4,5章節讀書筆記(二),


這兩章全是理論性的東西,我覺得不必過於鑽牛角尖。理論這東西,只有在長期的實踐中去慢慢領悟才會深刻。下面我只寫些我認為重要的關鍵知識。

(一)類型轉換

知識點:向基類型的轉換被認為是一種安全的隱式轉換;向派生類型轉換時,只能顯示轉換。

舉例:

Object o = new Employee();
Employee e = (Employee)o;

重要認知:CLR的類型檢查會遍歷繼承層次結構,用每個基類型去核對指定的類型。

常用代碼:(見下方代碼段。CLR會檢查兩次對象的類型):

if(o is Employee){
      Employee e = (Employee)o;            
}

簡化代碼:(見下方代碼段。CLR會檢查一次對象的類型)

Employee e = o as Employee;
if(e != null){
     //...
}

(二)值類型和引用類型

重要認知:1.棧中儲存的是值類型、引用類型的指針(地址);堆中存儲引用類型本身(不全是,見2)。

              2.包含在引用類型內的值類型不會被存儲在棧中,而是堆中(還是值類型,未被裝箱),它被包含於引用類型對象中。

(三)重視裝箱和拆箱對程序性能的影響

理解以下代碼中的三次裝箱:

public static void Main(){
      Int32 v=5;
      Object o =v;
      v=123;
      Console.WriteLine(v + ", " + (Int32)o );
}

第一次裝箱是將v轉換成object對象;第二次和第三次是因為WriteLine()方法要獲取一個String對象,這樣v和被拆箱的o會被再次裝箱。

“裝箱”發生的事情:

1. 在托管堆中分配內存,包括值類型字段需要的內存量+類型對象指針的內存量+同步塊索引需要的內存量。

2. 值類型的字段復制到新分配的堆內存。

3. 返回對象的地址。(地址是對對象的引用(指針),值類型變成引用類型)

概念應用:

重寫類中的ToString()方法,可以避免使用ToString()方法時的裝箱問題。

public class A
{
      private int x;
      public override String ToString()
      {
            return string.formart("{0}",x);
      }
}

注意重寫的ToString()方法內部如果調用了base.ToString();外部調用此方法時,值類型依然會被裝箱。


CLR VIA C怎

第一次看感覺好難,但硬著頭皮看下去後,感覺又不是很難了,從這本書可以學習到更多的知識,用Keni的話,這是一本入門的書,因為讀完後,你會有很多的疑問,帶著這些......
 

CLR via C# 第三版電子書可以發份嘛?郵箱:10139713@qqcom

是這本,要的哈,加俺

《CLRviaC#》 作者:(美)瑞奇特著 頁數:778 出版日期:2010.09 簡介:本書針對CLR和.NET Framework 4.0進行深入、全面的探討,並結合實例介紹了如何利用它們進行設計、開發和調試。全書5部分29章。第Ⅰ部分介紹CLR基礎,第Ⅱ部分解釋如何設計類型,第Ⅲ部分...
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved