昨天寫代碼,不經(jīng)意就把引用類型和值類型比較的不同忘記了,有必要記下來提醒自己,以免以后犯一樣的錯(cuò)誤. 先貼上自己寫的錯(cuò)誤代碼 Object entryId ="entryid"; var result =sourceDynamicObject.where (o=>o.GetDynamicObjectItemValue
C#有以下一些引用類型: 數(shù)組(派生于System.Array) 用戶用定義的以下類型: 類:class(派生于System.Object); 接口:interface(接口不是一個(gè)“東西”,所以不存在派生于何處的問題。Anders在《C# Programming Language》中說,接口只是表示一種約定[contract]); 委托:delegate(派生于System.Delegate)。 object(System.Object的別名); 字符串:string(System.String的別名)。 可以看出: 引用類型與值類型相同的是,結(jié)構(gòu)體也可以實(shí)現(xiàn)接口; 引用類型可以派生出新的類型,而值類型不能; 引用類型可以包含null值,值類型不能(可空類型功能允許將 null 賦給值類型); 引用類型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身。而將一個(gè)值類型變量賦給另一個(gè)值類型變量時(shí),將復(fù)制包含的值。 對(duì)于最后一條,經(jīng)?;煜氖莝tring。我曾經(jīng)在一本書的一個(gè)早期版本上看到String變量比string變量效率高;我還經(jīng)常聽說String是引用類型,string是值類型,等等。例如: string s1 = "Hello, "; string s2 = "world!"; string s3 = s1 + s2;//s3 is "Hello, world!" 這確實(shí)看起來像一個(gè)值類型的賦值。再如: string s1 = "a"; string s2 = s1; s1 = "b";//s2 is still "a" 改變s1的值對(duì)s2沒有影響。這更使string看起來像值類型。實(shí)際上,這是運(yùn)算符重載的結(jié)果,當(dāng)s1被改變時(shí),.NET在托管堆上為s1重新分配了內(nèi)存。這樣的目的,是為了將做為引用類型的string實(shí)現(xiàn)為通常語義下的字符串。
通過上面的介紹,下面的結(jié)果就很明顯
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供三元網(wǎng)站建設(shè)、三元做網(wǎng)站、三元網(wǎng)站設(shè)計(jì)、三元網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、三元企業(yè)網(wǎng)站模板建站服務(wù),10年三元做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。string s1= "abc";
string s2="abc";
String s3 = new String("abc");
String s4 =new String("abc");
s1==s2 true
s3==s4 false
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。