2010-12-12 64 views
1

快速的问题,我一直在阅读一些.Net的东西,一些人说话的方式暗示着.Net库可以用于多种.Net语言。也许这只是我的一厢情愿的想法。例如,我可以使用Boo .Net语言在C#中编程的Tao框架吗?
我可以解释它的唯一方法是如果库被编译为字节码以在.Net中运行并且可以与任何也编译的语言一起使用。我不知道很多关于.NET虽然^ -^.Net库在任何.Net语言中使用?

感谢

+0

这是正确的。一旦你将一个库编译成一个程序集(dll),它就可以与任何其他.net语言链接起来。互操作性是一个关键优势。基本上只选择你喜欢的语言 - 或者最适合特定的问题 - 最终的编译代码是独立于语言的。 – 2010-12-12 21:36:25

+0

这是我长期以来发现的最令人敬畏的事情! – Isaiah 2010-12-12 21:38:54

回答

2

可以在任何.NET语言中使用任何合适的(IL代码和清单) - 只要代码符合CIL并且符合CLS(通用语言规范)。

MSDN(CLS):

要充分与其他对象,而它们的实施在语言,对象必须暴露给调用者只通用于所有必须与互操作语言的那些特征的互动。出于这个原因,已经定义了通用语言规范(CLS),它是许多应用程序所需的一组基本语言功能。 CLS规则定义了通用类型系统的一个子集;也就是说,适用于通用类型系统的所有规则都适用于CLS,除非CLS中定义了更严格的规则。 CLS通过定义一系列开发人员可以依赖的各种语言的功能来帮助增强和确保语言的互操作性。 CLS还制定了CLS合规要求;这些帮助您确定您的托管代码是否符合CLS以及某个给定工具支持使用CLS功能的托管代码的开发程度。

+0

再一次非常棒,我的意思是来自python和lisp,这真的很酷 – Isaiah 2010-12-12 21:48:39

+0

@Isaiah - MS设计它的方式,因为他们希望C#和VB.NET都使用相同的基本库。 – Oded 2010-12-12 22:06:49

+0

一个典型的突破是,c#是大小写敏感的,vb不是....如果你在c#中创建一个类型来暴露仅在套管中区分的成员,它将被标记为不符合CLS并且不能被使用。 – 2010-12-12 22:48:06

1

如果我明白你的问题正确的,那么你可以创建,比方说,C#或德尔福棱镜一个.NET库,它编译成IL,并得到一个大会。然后你可以在你的VB.NET项目中引用和使用这个程序集。

0

我们用我们的VB.Net项目C#助手库没有问题 - 单个项目只能处理一个单一的语言,但一个解决方案可以包含多个项目,每个使用他们自己的语言(或引用任何语言编写的任何组件编译为MSIL)具有完整的VS调试功能

1

互操作性存在限制。特别是如果不同语言的类型系统差异显着。但Boo和C#与语法非常相似,所以它们之间不应该有任何问题。

+0

我很喜欢boo,但是如果我尝试一下... ironScheme呢? – Isaiah 2010-12-12 21:58:27

+0

一个典型的突破是,c#是大小写敏感的,vb不是....如果你在c#中创建一个类型来暴露仅在套管中区分的成员,它将被标记为不符合CLS并且不能使用。 – 2010-12-12 22:47:43