MSDN中隐式类型的问题请教

iamybj 2008-09-16 09:39:37
在vs2008的msdn的C#编程指南里,其中在数组这一节介绍了隐式类型(ms-help://MS.MSDNQTR.v90.chs/dv_csref/html/e05be95c-6732-403d-ae42-b35f057cbbea.htm)。
这页的下方有这个一小节:


对象初始值设定项中的隐式类型的数组
创建包含数组的匿名类型时,必须在该类型的对象初始值设定项中对数组进行隐式类型化。在下面的示例中,contacts 是一个隐式类型的匿名类型数组,其中每个匿名类型都包含一个名为 PhoneNumbers 的数组。请注意,对象初始值设定项内部未使用 var 关键字。

var contacts = new[]
{
new {
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new {
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};


它里面出现了一个“匿名类型”,请问匿名类型和隐式类型是一个意思吗?
我始终没有弄明白这里的contacts对象到底是什么意思,如果不使用隐式类型,这个contacts该如何定义?

...全文
54 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQknife 2008-09-16
  • 打赏
  • 举报
回复
给你个链接
http://www.cnblogs.com/artech/archive/2007/07/15/818980.html
Magic_YJL 2008-09-16
  • 打赏
  • 举报
回复
学习~
brallow 2008-09-16
  • 打赏
  • 举报
回复
补充一下:
结合上面我说的一句:隐式类型,它仍然有确定的类型名称。
即使是var应用于匿名类型时,它仍然是有确定的类型名称的。只是这个名称只能由编译器提供给它,并且在编译时才生成。

对于你上面的第二个问题,由于它是隐匿类型和匿名类型的结合,所以你是无法手工给出确定的类型名称的。

var contacts = new[]
{
new {
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new {
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};

对于这段代码,首先由编译器给出

new {
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
}

这个的类型,可能是任意合法的类型名称,比如:XXXX;然后由

new[]

得到相应的数组类型:XXXX[]

这些无法在手工提供。
brallow 2008-09-16
  • 打赏
  • 举报
回复
不是。
隐式类型,它仍然有确定的类型名称。
比如:
var s = "string";
vas s = new String("abc");
这是隐式类型,通过后面的代码(一个是常量,一个是new操作符)分析推测出确定的类型名称。

匿名类型是这样的:
var s = new {property1="abc",propoerty2=13};
这样的语句:通过后面的代码,你分析不出一个确定的类型。通过匿名类型的技术,编译器生成一个假定的类型比如:


public class Anonymous12341324
{
public string property1{get;set;}
public int property2{get;set;}
}


由于匿名类型除了编译器外没有确定的类型名称,所以你必须配合隐式类型技术来实现,由var来动态的确定类型名称。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧