日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CLR VIA

發(fā)布時間:2023/12/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CLR VIA 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?標題?狀態(tài)?內容

什么是CLR?

什么是托管模塊?

托管模塊由什么組成?

。net代碼的執(zhí)行過程

?

?http://www.cnblogs.com/aaa6818162/p/4726581.html

?

http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html

?

?

?

為了執(zhí)行程序,首先必須把它的IL轉換成本地CPU指令

?

第二次調用WriteLine的情況

PE文件?http://lwglucky.blog.51cto.com/1228348/283812/
?元數(shù)據(jù)的??http://www.cnblogs.com/bluewater/archive/2006/10/17/531639.html

元數(shù)據(jù)的邏輯結構類似于數(shù)據(jù)庫中的表,所以被稱為元數(shù)據(jù)表。元數(shù)據(jù)表有列和行,每一行都是不重復的,都有唯一的RID(表索引),RID就像是數(shù)據(jù)庫表的主建。數(shù)據(jù)庫有Schema,如每一列的類型,大小等,元數(shù)據(jù)也有類似的東西,他們被稱為“元-元數(shù)據(jù)”,包含表中記錄的大小,列的大小,偏移等。

?

.Net 托管模塊與程序集的關系

??http://blog.csdn.net/kmguo/article/details/17055065
???
?

.NET概念:.NET程序編譯和運行

?

?http://blog.csdn.net/yysyangyangyangshan/article/details/7306346

應用程序域(AppDomain)。可以理解成很多應用程序域都可以運行在同一個.NET的進程中,可以降低系統(tǒng)消耗,同時不同的域之間互相隔離,在安全性方面有保障。另外對于同一個進程內不同域之間的通信也相對簡單一點

???
  • 這段代碼進行了幾次裝箱?

public static void Main() {

Int32 v = 5; // 創(chuàng)建值變量

Object o = v; // 裝箱

v = 123; // Changes the unboxed value to 123

Console.WriteLine(v + ", " + (Int32) o); // Displays "123, 5" ,裝箱兩次

}

?驗證四種判等方式??

Object的靜態(tài)方法ReferenceEquals

?

只適用于判斷兩個引用是否指向同一個實例,不適用于值類型(或者說用于值類型是沒意義的,因為永遠返回false)。如下:

?

?

TestEqual?te?=?new?TestEqual();

bool?b1=?object.ReferenceEquals(te,te);

bool?b2?=?object.ReferenceEquals(1,?1);

??

b1trueb2falseb2false的原因是兩個整型值1裝箱之后是兩個不同的Object實例。

?

?

Object中定義的實例級虛方法Equals

?

?

默認行為是判斷引用是否相等,引用類型從Object中繼承了這一行為,如下:

?

???TestEqual?te1=?new?TestEqual();

???TestEqual?te2?=?new?TestEqual();

???bool?b4=?te1.Equals(te2);

???bool?b5?=?te1.Equals(te1);

???Console.WriteLine(b4);

???Console.WriteLine(b5);

?

?

輸出結果很明顯第一個假,第二個真。

?

但是對于值類型來說,由于ValueType重寫了這個方法,所以其行為不同,可以判斷值是否相同,而不是引用。

?

?

如下:

?

?

?????int?num1?=?15;

?????int?num2?=?15;

?????bool?b3?=?num1.Equals(num2);

??Console.WriteLine(b3);

?

雖然num1num2是兩個變量,但是只要它們的值一樣,b3結果就為true

?

?

③?=?=運算符:

?

?

應用于值類型的時候其行為是判斷值是否相等。應用于引用類型(String除外)的時候判斷引用是否相同。

?

?

Object中的靜態(tài)方法Equals

?

?

它接受兩個Object類型的參數(shù),它會調用第一個參數(shù)的實例級Equals方法,以第二個參數(shù)作為該方法的參數(shù)來進行判等。所以其行為表現(xiàn)出來和實例級的Equals方法一樣。只是其內部添加了對于兩個參加判等的參數(shù)是否本身已經(jīng)是同一個引用的判斷,還有兩個參數(shù)是否為null的判斷。

?常量const?

http://www.cnblogs.com/janes/archive/2011/07/11/2103215.html?

常量是恒定不變的,在編譯時就確定了它的值,編譯后直接將值存到元數(shù)據(jù)中。變量類型只能是編譯器能直接識別的基元類型,不能是引用類型,因為引用類型需要在運行時調用構造函數(shù)進行初始化。

通過ILDasm工具查看一下,const變量編譯后為static literal類型,所以不難理解,常量是針對類的一部分,而不是實例的一部分

?只讀字段readonly??類的數(shù)據(jù)成員通常用來保存一個值類型的實例或者指向引用類型的引用,CLR支持讀寫和只讀兩種數(shù)據(jù)成員,其中只讀數(shù)據(jù)成員使用readonly修飾的
???其實很簡單,C#中方法中的參數(shù)也是一個變量,這個變量也需要有一個地址。

對于引用類型的方法參數(shù),傳入的對象如果不加Ref,方法參數(shù)也就是這個變量也將被創(chuàng)建,不過因為是引用類型,所以地址直接指向所傳入對象的地址。所以實際上是有兩個變量,但都指向了同一處地址。
如果加了Ref,那么方法參數(shù)這個變量,將不被創(chuàng)建,也就是只有一個變量,指向了一處地址。

引用類型加不加Ref沒有本質區(qū)別,只是多個了變量而已。
?

string/String類型作為參數(shù)是傳值還是傳址_AX

?

?class Program
??? {
??????? static void Swap(string a, string b)
{
??????????? string c = a;
??????????? a = b;
??????????? b = c;
??????? }
???????
??????? static void Main(string[] args)
??????? {
??????????? string str1 = "Jenny";
??????????? string str2 = "Benny";


??????????? Swap(str1, str2);

??????????? Console.WriteLine(str1);
??????????? Console.WriteLine(str2);
??????????? Console.Read();

??????? }
??? }

?

?

string在.net中是個特殊的對象,當把一個string傳給一個方法時其實是做了一個“s=s”的操作,如果是其它對象,當然是前者得到后者的一個地址引用,而string對象每做一次賦值操作,被賦值的string都會重開一個內存空間將后者的值復制過來,所以才有了你的結果。

?

string類是引用類型,在賦值時是傳址的。但如果用作函數(shù)參數(shù)的話系統(tǒng)會自動復制一個string類進行運算,因為函數(shù)默認是按值傳遞的。如果函數(shù)要傳址,請在函數(shù)定義時,在參數(shù)前加上ref,在使用時也加上ref就可以了。

{
?7????class?TestString
?8????{
?9????????public?static?void?Main()
10????????{
11????????????string?s?=?"AX";
12????????????Change(s);
13????????????Console.WriteLine(s);
14????????????Console.ReadLine();
15????????}
16
17????????private?static?void?Change(string?s)
18????????{
19????????????s?=?"zhz";
20????????}
21????}
22}

?C#友元程序集??
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???

總結

以上是生活随笔為你收集整理的CLR VIA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。