日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

圖解DotNet框架之二:System

系統(tǒng) 2142 0

( 聲明:本系列只想給大家介紹.net框架,并不是語法和類的使用的講解,所以只能概括的描述一下所提到的類,如果有疑問可以到MSDN上面去查 )


前面我們學習了.net的運行引擎,知道了Appdomain要承載各種dll,那么我們就來學習一下最基本的system.dll,這個任何代碼都要引用的大家伙.
還是老規(guī)矩,圖解..嘿嘿上圖了



圖解DotNet框架之二:System

看了圖以后大家應該有一個初步的了解了吧,我們來一個一個的學習吧,大家都知道.net中分為值類型和引用類型,我們來看這兩種類型的區(qū)別

object:這個類是.net所有類的父類,他有一些公用的方法,如ToString,Equals,GetHashCode等,這里用到GOF23中模板方法(Templete Method)這個設計模式,其實我們在開發(fā)中經常去用這個模式,這樣就省去了其他的類重復來寫這些方法.
ValueType:.net中所有的值類型都派生自這個類,而他自己卻又派生自Object,很奇怪吧,實際上只是MS為了讓.net完全的面向對象而已,沒有什么,理解就好.

1.賦值問題:值類型和引用類型在內存中分別存在棧和堆上,他們在賦值的時候,值類型是復制,引用類型是本身(實際上是產生一個對堆上同一個對象的新引用).要說明的是包含引用類型的值類型,在賦值時也是Copy了引用,不要迷糊哦.

我們來寫點代碼說明這個問題吧.

static void Main( string []args)
{
int i = 10 ;
int j = i;
j
= 20 ;
Console.Write(i);
/**/ /// 結果i還是10,而沒有變成20,說明賦值是復制
Testt1 = new Test();
t1.age
= 10 ;
t1.name
= " test " ;
Testt2
= new Test();
t2
= t1;
t1.age
= 20 ;
t1.name
= " Test2 " ;
Console.Write(t2.age.ToString()
+ " & " + t2.name); /**/ /// 結果是"20&Test2",說明傳遞的是本身
}


2.作為參數傳遞的問題:值類型作為參數傳遞時如果按值傳遞那么就是Copy,如果按照引用傳遞那么就是本身,那么引用類型呢?我們來看段代碼:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> namespace ConsoleApplication3
{
class Program
{
class Test
{
public string name; // 為了方便就不封裝了
public int age;
}

static void Main( string []args)
{


Testt1
= new Test();
t1.age
= 10 ;
t1.name
= " test " ;
TestMethod(t1);
Console.Write(t1.age.ToString()
+ " & " + t1.name); /**/ /// 結果是"20&Test2",說明傳遞的是本身的引用,而一個引用重新賦值不會影響本身
TestMethod( ref t1);
Console.Write(
" /r/n " + t1.age.ToString() + " & " + t1.name); /**/ /// 結果是"0&null",說明傳遞的是本身.
Console.Read();
}

static void TestMethod(Testt)
{
t.age
= 20 ;
t.name
= " Test2 " ;
t
= new Test(); // 這里重新初始化
}

static void TestMethod( ref Testt) // 看看按照引用傳遞會發(fā)生什么?
{
t.age
= 20 ;
t.name
= " Test2 " ;
t
= new Test(); // 這里重新初始化
}


所以說按照引用(ref)傳遞引用類型,傳遞的是本身。而按照值傳遞,傳遞的是引用類型的引用。

Delegate:委托的基類,要注意delegate關鍵字,繼承自MulticastDelegate,而MulticastDelegate繼承自Delegate.委托類型維護的方法的地址列表,就保存在Delegate這個對象當中.這就是.Net委托的秘密.這里用到了GOF23中Proxy(代理)這種設計模式,起到下述 3)保護代理的作用。

圖解DotNet框架之二:System

在需要用比較通用和復雜的對象指針代替簡單的指針的時候,使用P r o x y 模式。下面是一 些可以使用P r o x y 模式常見情況:
1) 遠程代理(Remote Proxy )為一個對象在不同的地址空間提供局部代表。

2 )虛代理(Virtual Proxy )根據需要創(chuàng)建開銷很大的對象。
3) 保護代理(Protection Proxy )控制對原始對象的訪問。保護代理用于對象應該有不同 的訪問權限的時候。

4 )智能指引(Smart Reference )取代了簡單的指針,它在訪問對象時執(zhí)行一些附加操作。

在這里Delegate作為RealSubject,而multicastDelegate作為Proxy,來保護Delegate中的一些方法.


委托還有異步調用,這將在System.threading這一節(jié)來講解.

圖解DotNet框架之二:System


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 子洲县| 门头沟区| 德阳市| 远安县| 淮北市| 阜宁县| 临高县| 金沙县| 清水县| 正定县| 布尔津县| 慈利县| 湖南省| 德钦县| 湖北省| 中阳县| 阳朔县| 克山县| 麻栗坡县| 额济纳旗| 邢台县| 遂川县| 沐川县| 上犹县| 永宁县| 凌海市| 南投县| 东台市| 汤阴县| 永平县| 桃园县| 山阴县| 南平市| 宁阳县| 田林县| 黑河市| 杭州市| 弥勒县| 三亚市| 静乐县| 九龙城区|