日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

CLR VIA

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

什么是CLR?

什么是托管模塊?

托管模塊由什么組成?

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

?

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

?

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

?

?

?

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

?

第二次調(diào)用WriteLine的情況

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

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

?

.Net 托管模塊與程序集的關(guān)系

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

.NET概念:.NET程序編譯和運(yùn)行

?

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

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

???
  • 這段代碼進(jìn)行了幾次裝箱?

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" ,裝箱兩次

}

?驗(yàn)證四種判等方式??

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

?

只適用于判斷兩個(gè)引用是否指向同一個(gè)實(shí)例,不適用于值類型(或者說(shuō)用于值類型是沒(méi)意義的,因?yàn)橛肋h(yuǎn)返回false)。如下:

?

?

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

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

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

??

b1trueb2falseb2false的原因是兩個(gè)整型值1裝箱之后是兩個(gè)不同的Object實(shí)例。

?

?

Object中定義的實(shí)例級(jí)虛方法Equals

?

?

默認(rèn)行為是判斷引用是否相等,引用類型從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);

?

?

輸出結(jié)果很明顯第一個(gè)假,第二個(gè)真。

?

但是對(duì)于值類型來(lái)說(shuō),由于ValueType重寫了這個(gè)方法,所以其行為不同,可以判斷值是否相同,而不是引用。

?

?

如下:

?

?

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

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

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

??Console.WriteLine(b3);

?

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

?

?

③?=?=運(yùn)算符:

?

?

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

?

?

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

?

?

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

?常量const?

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

常量是恒定不變的,在編譯時(shí)就確定了它的值,編譯后直接將值存到元數(shù)據(jù)中。變量類型只能是編譯器能直接識(shí)別的基元類型,不能是引用類型,因?yàn)橐妙愋托枰谶\(yùn)行時(shí)調(diào)用構(gòu)造函數(shù)進(jìn)行初始化。

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

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

對(duì)于引用類型的方法參數(shù),傳入的對(duì)象如果不加Ref,方法參數(shù)也就是這個(gè)變量也將被創(chuàng)建,不過(guò)因?yàn)槭且妙愋?#xff0c;所以地址直接指向所傳入對(duì)象的地址。所以實(shí)際上是有兩個(gè)變量,但都指向了同一處地址。
如果加了Ref,那么方法參數(shù)這個(gè)變量,將不被創(chuàng)建,也就是只有一個(gè)變量,指向了一處地址。

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

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中是個(gè)特殊的對(duì)象,當(dāng)把一個(gè)string傳給一個(gè)方法時(shí)其實(shí)是做了一個(gè)“s=s”的操作,如果是其它對(duì)象,當(dāng)然是前者得到后者的一個(gè)地址引用,而string對(duì)象每做一次賦值操作,被賦值的string都會(huì)重開(kāi)一個(gè)內(nèi)存空間將后者的值復(fù)制過(guò)來(lái),所以才有了你的結(jié)果。

?

string類是引用類型,在賦值時(shí)是傳址的。但如果用作函數(shù)參數(shù)的話系統(tǒng)會(huì)自動(dòng)復(fù)制一個(gè)string類進(jìn)行運(yùn)算,因?yàn)楹瘮?shù)默認(rèn)是按值傳遞的。如果函數(shù)要傳址,請(qǐng)?jiān)诤瘮?shù)定義時(shí),在參數(shù)前加上ref,在使用時(shí)也加上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#友元程序集??
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???
???

總結(jié)

以上是生活随笔為你收集整理的CLR VIA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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