程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 匿名類型是不是強類型?

匿名類型是不是強類型?

編輯:C#入門知識

在一次會議上由於一些需要提到了匿名類型,也由此展開了兩批人,我和另一位主張匿名類型不是強類型,而另兩位則覺得匿名類型屬於強類型,此博文主要深入了解一下匿名類型。

什麼是匿名類型?

原來不想寫這個標題相關內容的,因為類似文章還是很多的,但為了一些新人能更好的閱讀本文章就順便提及一下,這裡不涉及太深的東西,只是簡單的介紹。

匿名類型和var關鍵字是Visual C# 3.0提供的一個新特性或者說是語法糖,var是隱式類型而並不是類型javascript中的var。

詳解匿名類型

匿名類型並不屬於.NET Framework

在MSDN的文檔中其實匿名類型並不屬於.NET Framework,它屬於Visual Studio更准確的來說它屬於Visual C# 3.0,不扯太多題外話,再扯下去記得再"論.NET Framework和C#"哈哈。

匿名類型的智能感知

從這邊來看匿名類型是可以智能感知的,那是否說明匿名類型就是一個強類型呢?

匿名類型是只讀的

匿名類型中的所有屬性器除在初始化時候都是只讀的,所以一旦初始化成功後它將無法進行賦值。

無法在一個數組內添加兩種不同屬性的匿名類型

我們來看看反編譯之後他們會生產什麼?

反編譯之後會發現一個<>f__AnonymousType0<int, string, int>,這個類型是什麼呢?定義結構跟Tuple<>非常的相像。如果定義了類型那麼它不就是一個強類型嗎?我們追蹤看看。

會發現提示出是由編譯器生成的類,我們無法追蹤他,也無法確定他是否定義了這個類。

匿名類型到底是不是強類型?

首先不饒那麼多彎,我先闡述一下我個人的想法,我個人覺得匿名類型不是一個“強類型”

當然這邊強類型加了引號,其實在C#中所有的類型都是強類型的,因為C#本身就是一個強類型語言。

但這邊所指的強類型更傾向於使用,因為匿名類型脫離了var只能將其轉換成object類型,那麼它將無法擁有神奇的智能感知,再加上var的使用是有限制的,var不能在全局定義,只能在方法體內定義,所以脫離了當前方法體它將不再擁有智能感知的光環。

其實在本人的日常開發中匿名類型使用的極少,幾乎沒有,個人更傾向把匿名類型使用在數據綁定上,比如把bool類型的IsEnable投射至匿名類型中的 { IsEnable = isEnable ? "" : "" }用於友好的數據綁定,但這僅限於這種綁定的地方非常非常少。例如:下拉框的綁定。

結語

這次在博客園的第二篇文章,排版、潤色還有所欠缺,希望能堅持寫博文以彌補這些問題。

歡迎大家和諧討論( ̄ˇ ̄)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved