Jon*_*eet 29
如果你需要动态的东西听起来很酷,但我不希望经常使用它.
委托和接口的通用方差是相似的 - 目前缺乏方差是一个令人头痛的问题,但很多地方很难解决C#4中可用的有限差异.
COM功能对我并不特别感兴趣 - 我真的应该对它们的功能有所了解.
构建不可变类型时,可选参数和命名参数可能会产生很大的不同:它启用如下语法:
Person p = new Person (name: "Jon", age: 32);
Run Code Online (Sandbox Code Playgroud)
没有庞大的构造函数重载组合.我更喜欢以readonly自动实现的属性的形式编写不可变类型的更多支持,但我不希望我们会得到那些.(目前他们肯定不在拟议的功能列表中.)
我个人实际上对.NET 4.0 的一些框架功能更感兴趣- 特别是代码契约和并行扩展.
CMS*_*CMS 17
方法参数默认值:
public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
也许匿名返回类型:
public var MyMethod2()
{
// ..
}
Run Code Online (Sandbox Code Playgroud)
IDynamicObject,后面的胶水dynamic,允许在运行时解释一个调用.
这对于固有的无类型场景很有意义,例如REST,XML,COM DataSet,动态语言等等.它是在动态语言运行时(DLR)之上构建的动态分派的实现.
相反繁琐反射语义的,你点到声明为变量dynamic.想象一下使用Silverlight中的Javascript对象:
dynamic obj = GetScriptObject();
HtmlPage.Window.Alert(obj.someProperty);
Run Code Online (Sandbox Code Playgroud)
支持所有C#语法(我相信):
HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]);
Run Code Online (Sandbox Code Playgroud)
反思本身看起来更清洁:
public void WriteSomePropertyValue(object target)
{
Console.WriteLine((target as dynamic).SomeProperty);
}
public void WriteSomeMethodValue(object target, int arg1, string arg2)
{
Console.WriteLine((target as dynamic).SomeMethod(arg1, arg2));
}
Run Code Online (Sandbox Code Playgroud)
dynamic是工具包中的另一个工具.它不会改变静态与动态的争论,只是简化了摩擦.
Dynamic 关键字看起来可以很好地弥合 IronRuby 或 IronPython 等动态语言之间的差距,这可能有助于它在 Microsoft 单一文化中的采用......这让我很兴奋。
虽然我对它很感兴趣,但我也担心它会被过度使用,比如泛型和 LINQ、SQLCLR 等:)
| 归档时间: |
|
| 查看次数: |
12688 次 |
| 最近记录: |