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

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

學C#你應該熟練使用ILDasm和Reflector【帶視頻教程】

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

  

     我們在學習C#的時候通常都會多多少少接觸ILDasm和Reflector,這兩樣工具讓我們對C#的理解不會只停留在編譯器這個層面

上,而是讓我們更深入的穿透編譯器。這篇也是希望對IL和Reflector不是很了解或者懶的了解的同學能夠重視起來,同樣這篇我還是

以QA的形式來告知這兩樣工具的強大和必要性。

 

Q:接口中只能存在方法嗎?

 

A: 這個問題,如果你對IL不熟悉的話,你可能會認為是錯的,你可能會天真的認為,記得不錯的話,屬性好像也可以定義在接口中,事

    件好像也可以定義在接口中,字段可不可以就不知道了,好吧,我們看下IL,到底是怎么樣的。

1     public interface IFly2     {3         bool CanFly { get; set; }4 5         event Action ActionFly;6     }

然后我們再看看IL,會發現 “屬性” 其實GetXXX/SetXXX方法,“事件”其實就是 Add_XXX/Remove_XXX方法,

當然還有一個 “索引器”,本質上也是 get_Item/set_Item 這個配對方法,看完這三個屬性之后,可能有些人會想來出來還有一個

“構造函數”,本質上它也是方法,但是確不能定義在接口中,當然這個就不是IL的事情的,而是OO定義的問題了,因為接口定義的

目的是規范,而ctor是初始化類,屬于類的一種實現,而接口的規范就是只能提供方法的定義,不能提供方法的實現,現在我們再看

一下,字段是否可以定義在接口中?

從截圖中可以清楚的看到,“接口不能包含字段”的error信息,好了,到現在我們可以總結一句話就是,接口中只能定義除構造函數

之外的方法,這個例子展示IL對我們分析問題的重要性。

 

Q:Random.Next為什么多次New之后,會出現重復?

        static void Main(string[] args)        {            for (int i = 0; i < 1000; i++)            {                var rand = new Random();                Console.WriteLine(rand.Next());            }            Console.Read();        }

 

A: 這個問題問的好,要想知道為什么,我們得一定要用Reflector來反編譯下Random類的代碼,到底里面是怎么實現的,要知

     其然,還要知其所以然,下面我們來看看反編譯后的代碼。

從next函數中的定義可以看出,其實return 的num值取決于seedArray,那么我們下一步看看seedArray到底是怎么玩起來的。

通過代碼,我們可以找到其實就是在ctor里面做的。

我們可以看到這個for循環,大概看下代碼意思,可以看出第一個for是給seedArray灌值,第二個for是取下標就是求余,然后-=操作

來讓SeedArray中的值更加的混亂,反正大體意思就是SeedArray中的值比較亂,比較隨機,然后我們的next就是通過inext和inextp

取SeedArray值,從而造成隨機數,這個不難看出,隨機的源頭就是我們給過去的Seed值,然后我們看到inext和inextp都是++操作,

所以我們多次next操作之后,這就保證我們取數永遠都是隨機的,而如果源頭的Seed一樣的話,就會導致return的值一直重復。

 

這次我們把Random放到for循環之外再看看,因為inext和inextp是通過++操作來獲取SeedArray的值來盡可能的避免重復。

 1         static void Main(string[] args) 2         { 3             var rand = new Random(); 4  5             for (int i = 0; i < 1000; i++) 6             { 7                 Console.WriteLine(rand.Next()); 8             } 9             Console.Read();10         }

 

 

請猛擊視頻教程:http://t.cn/RPtyOFp

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浙江省| 新兴县| 内乡县| 彭水| 崇义县| 宜宾县| 丹棱县| 松江区| 北辰区| 湖北省| 辽源市| 望谟县| 邯郸市| 城市| 巴南区| 玛曲县| 朝阳市| 金寨县| 怀宁县| 武义县| 邵武市| 屏边| 弥勒县| 四平市| 峡江县| 紫云| 阿荣旗| 清远市| 姚安县| 元谋县| 巩留县| 漯河市| 武定县| 柯坪县| 大安市| 乌鲁木齐市| 丹东市| 绥阳县| 黑山县| 泰和县| 凤冈县|