我对在动态语言中编写.NET的可能性感到困惑,例如(Iron)Ruby。特别是,我在IronRuby中看到过使用泛型(...foo[String]
)的代码,但我不知道Ruby中的这个功能,因为在动态语言中我似乎无稽之谈。
所以,当我在IronRuby中编写.NET应用程序时,它是如何进行类型安全和编译的?我认为它和其他地方的Ruby一样动态。我认为如果Ruby语法没问题,所有类型检查都将在运行时完成。
另外,据我所知,.NET本身是面向类型的 - 有些类大量使用上面提到的泛型。这是怎么处理的?
那么代表呢?在动态语言中,我几乎可以使用函数 - 意大利面条,有时它很好(就像在javascript中黑客用户界面)。
或者我是否还要关心通用代表呢?
答案 0 :(得分:1)
请记住,即使像C#和VB .NET这样的语言现在(可选)也是动态的,而不是
string strongTypedReference = "Hello";
从.NET 4开始,您现在也可以:
dynamic dynamicReference = "Hello";
因此:
strongTypedReference.Foo() // gives a compile-time error as expected.
dynamicReference.Foo() // compiles, but will give a run-time error.
dynamicReference.ToString() // compiles and binds to the correct call at run-time.
所以是的,使用dynamic,编译器不会在编译时检查方法调用,属性访问器等的解析,而是在运行时检查。这适用于在.NET中提供动态类型的所有语言,例如IronRuby,IronPython,C#,VB等。