狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#里的var和dynamic區(qū)別到底是什么,你真的搞懂了嘛

admin
2023年6月17日 8:50 本文熱度 608

前言

var和dynamic都是不確定的類型,但是這兩個有本質(zhì)上的不同。不同在哪兒呢?var編譯階段確定類型,dynamic運行時階段確定類型。這種說法對不對呢?本篇看下。

概括

以下詳細敘述下這兩個(var,dynamic)上下文關(guān)鍵字的不同點。

1.例子

static void Main(string[] args)
{
var a = 0x10;
dynamic b = 0x10;
}

var其實在你設(shè)置它的變量a的值那一刻起,它的類型就確定了。這點你可以在VS里,在var上面查看定義,就可以看到。例子里面a的類型就是Int32。如果你把變量a賦值為字符串類型,那么它變量a的類型就是string。嚴格來說還沒到編譯階段,在編譯器VS里面就被識別了類型。

而dynamic則不同,它類似于public,static。無法查看其實際類型,但是這里注意了dynamic和var同稱之為:上下文關(guān)鍵字(官方說法是在代碼中提供特殊含義)。也就是說它們兩個在C#里面嚴格來說都是關(guān)鍵字。只不過運作模式不同。

2.IL Code

.method private hidebysig static void  Main(string[] args) cil managed

{

  .locals init (int32 V_0, object V_1)

  IL_0000:  nop

  IL_0001:  ldc.i4.s 16

  IL_0003:  stloc.0

  IL_0004:  ldc.i4.s 16

  IL_0006:  box [System.Runtime]System.Int32

  IL_000b:  stloc.1

  IL_000c:  ret

} // end of method Program::Main

在IL里面,var的操作模式是:將0x10(十進制的16)推送到堆上,然后從堆里面取出來賦值給a。dynamic的操作模式是:將0x10推送到堆上,然后從堆上取出來作為參數(shù)傳遞給box函數(shù)。這里可以看到很明顯的不同。當然IL依然不夠。所以下面我們上JIT。

3.ASM Code

var a=0x10

00007FF9FC1A76DC  mov         dword ptr [rbp+3Ch],10h

dynamic b=0x10

00007FF9FC1A76E3  mov         rcx,7FF9FC10E8D0h

00007FF9FC1A76ED  call        CORINFO_HELP_NEWSFAST (07FFA5BCA0000h)

00007FF9FC1A76F2  mov         qword ptr [rbp+28h],rax

00007FF9FC1A76F6  mov         rax,qword ptr [rbp+28h]

00007FF9FC1A76FA  mov         dword ptr [rax+8],10h

00007FF9FC1A7701  mov         rax,qword ptr [rbp+28h]

00007FF9FC1A7705  mov         qword ptr [rbp+30h],rax

可以看到dynamic的code遠比var的code夸張,而且性能也是成問題的。它這里調(diào)用了CORINFO_HELP_NEWSFAST實際上是進行了一個裝箱,也就是IL的box,運行時里面的JIT_New。先放入堆,然后返回裝箱后的對象,最后放入棧。這么看來,如果有性能需求,還是建議var,而慎用dynamic。

4.總結(jié):
var和dynamic的不同點。
1.var被rosyln編譯前就確定了類型,而dynamic的類型則是在CLR(這里更嚴格點應(yīng)該說是在JIT的IR)里面確定。
2.var只是一個簡單的值,而dynamic則被實例化成了一個對象,它的變量值是它對象的字段
3.var的性能遠遠大于dynamic的性能。


該文章在 2023/6/17 8:56:36 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved