首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 匿名類型特性詳解(二):創建使用、屬性只讀、類型身份與隱式類型區別

     編輯:關於C語言

創建與使用匿名類型


var book = new { Name = "C#", Price = 100 };
var bookA = new { Name = "C# 3.0", Price = 80 };
// 同結構 → 同類型
book = bookA; // ✅ 合法

屬性投射簡化初始化


class BookAsGood { public string Name { get; set; } public decimal Price { get; set; } }
var b = new BookAsGood { Name = "Test", Price = 99 };
var anon = new { b.Name, b.Price }; // 屬性名自動投射

屬性只讀特性


book.Name = "New"; // ❌ 編譯錯誤:屬性只讀,無 setter
// 匿名類型屬性僅有 get,構造後不可變

跨方法傳遞限制

  • 生存期僅限生成方法內部
  • 跨方法需轉 object,失去強類型
  • 建議:內部用匿名類型,邊界映射到 class/record

匿名變量 vs 隱式類型變量

概念定義示例
隱式類型變量 根據右側表達式推斷左側變量類型 var name = "C#" → string
匿名變量 根據初始化器推導出類型結構並創建實例 var book = new { Name="C#", Price=100 }
協同關係 匿名類型初始化器中的屬性賦值本身即隱式類型變量 Name="C#" 推斷 string,Price=100 推斷 int

總結

匿名類型提供聲明即定義、構造即賦值、只讀不可變、結構決定類型身份的輕量數據載體。理解其與隱式類型變量的協同關係、只讀本質、跨邊界限制,是正確應用於 LINQ 投影、臨時聚合、測試構建等場景的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved