C#中匿名类的声明及使用

编程入门 行业动态 更新时间:2024-10-22 18:29:27

C#中匿名类的<a href=https://www.elefans.com/category/jswz/34/1771058.html style=声明及使用"/>

C#中匿名类的声明及使用

C#中声明方法或类时,可以不指定的类或方法的名字,也就是匿名类和匿名的方法。以下主要介绍C#中匿名类的声明及使用。

1、匿名类的使用

匿名类是C# 3.0/.NET 3.x中新增特性,在匿名类的语法中并没有为其命名,而是直接使用new { }方式。

例如,

var anonyClass= new{ID = 1000,Name = "CJavaPy",Age = 3};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", anonyClass.ID,anonyClass.Name, anonyClass.Age);

注意:通过反编译工具可以看出匿名类被编译后会生成一个[泛型类],且匿名类所生成的属性都是只读的,与其对应的字段也是只读的;匿名类还重写了基类的三个方法:Equals,GetHashCodeToString

2、匿名类的共享

1)如果定义的匿名类与之前定义过的一模一样:属性类型和顺序都一致,则默认共享前一个泛型类。

var annoyClass1 = new
{ID = 1010,Name = "C",Age = 3
};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyClass1.ID,annoyClass1.Name, annoyClass1.Age);
Console.WriteLine(annoyClass1.ToString());
// 属性类型和顺序与annoyClass1一致,共同使用一个匿名类
var annoyClass2 = new{ID = 1020,Name = "Python",Age = 5};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyClass1.ID,annoyClass1.Name, annoyClass1.Age);
Console.WriteLine("annoyClass1.GetType() == annoyClass2.GetType():{0}",annoyClass1.GetType() == annoyClass2.GetType());   

2)如果属性名称和顺序一致,但属性类型不同,还是共同使用一个泛型类,只是泛型参数改变了而已,所以在运行时会生成不同的类:

var annoyClass2 = new{ID = 1020,Name = "Python",Age = 5};
var annoyClass3 = new{ID = "Java",Name = 1030,Age = 7};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyClass3.ID,annoyClass3.Name, annoyClass3.Age);
Console.WriteLine("annoyClass3.GetType() == annoyClass2.GetType():{0}",annoyClass3.GetType() == annoyClass2.GetType());

3)如果数据型名称和类型相同,但顺序不同,那么编译器会重新创建一个匿名类

var annoyClass2 = new{ID = 1020,Name = "Python",Age = 5};
var annoyClass4 = new{Name = "JavaScript",ID = 1030,Age = 7};
Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyClass4.ID,annoyClass4.Name, annoyClass4.Age);
Console.WriteLine("annoyClass4.GetType() == annoyClass2.GetType():{0}",annoyClass4.GetType() == annoyClass2.GetType());

更多推荐

C#中匿名类的声明及使用

本文发布于:2023-11-15 04:27:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1593633.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:声明

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!