阅读更多

63顶
34踩

编程语言

原创新闻 喜欢或者厌恶微软,都要看看 C# 4.0

2008-10-31 14:31 by 见习记者 ray_linn 评论(25) 有22481人浏览
C# 4.0又开始添加新的技术特点,这次它的老师是来自动态语言python与ruby。MS fans们以极大的热情和开放的心态,投入这场静态语言与动态语言的融合中去。

除了进一步完善了DLR这个为动态语言而设计的runtime(这一完美设计基本就宣判了 ruby.net的死刑,奠定了ironruby的胜局),C# 4.0也为此打开了门户,在C# 4.0中,添加dynamic这一关键字,这个关键字告诉编译器:“别担心我要做什么,运行时的时候就明了”。请看例子

using System;
using Microsoft.CSharp.RuntimeBinder;
using System.Scripting.Actions;
using System.Linq.Expressions;
namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            DoSomethingDynamic(7);
            DoSomethingDynamic(new Actor());
            DoSomethingDynamic(new DynamicThing());
            Console.ReadLine();
        }
        static void DoSomethingDynamic(dynamic thing)
        {
            try
            {
                thing.Act();
            }
            catch (RuntimeBinderException)
            {
                Console.WriteLine("thing does not implement Act");
            }
        }
    }
    public class Actor
    {
        public void Act()
        {
            Console.WriteLine("Actor.Act() was called");
        }
    }
    public class DynamicThing : IDynamicObject
    {
        public MetaObject GetMetaObject(System.Linq.Expressions.Expression parameter)
        {
            return new CustomMetaObject(parameter);
        }
    }
    public class CustomMetaObject : MetaObject
    {
        public CustomMetaObject(Expression parameter) : base(parameter, Restrictions.Empty){ }
        public override MetaObject Call(CallAction action, MetaObject[] args)
        {
            Console.WriteLine("A method named: '{0}' was called", action.Name);
            return this;
        }
    }
}


例子中的方法DoSomethingDynamic(dynamic thing),拥有一个带有dynamic关键字的变量thing。我们调用thing的方法Act(); 编译器无法检查thing是不是有Act方法直到运行的时候,为保险起见,我们用个try-catch块来捕捉异常。当然另一方面,鸭子类型(duck type)使得编程时无法使用智能提示,你可以在变量后面随手涂鸦,thing.Foo(), thing + 56, thing.X = "hello", var y = thing[12],这堆东西都能被编译。

接下来,我们在Main入口里反复调用了DoSomethingDynamic,传送了不同类型的参数:
首先是整数类型7。Int32没有Act方法,所以RuntimeBinderException被抛出。
其实是一个正常的类Actor带有一个Act方法,因此一切正常。
最后是继承了IDynamicObject的类DynamicThing ,IDynamicObject只有一个GetMetaObject方法需要被实现. GetMetaObject返回一个MetaObject,而你要做的实现一个如何处理方法调用的CustomMetaObject.我们的 CustomMetaObject重载了Call方法,并简单打印出方法的名字.

C# 现在主要还是静态类型语言,而Anders确定静态类型对于大型可伸缩系统是更好的范例。同时他也觉察到了动态特性的魅力,并为C#添加了诸如VB和其他动态语言的特性。
63
34
评论 共 25 条 请登录后发表评论
25 楼 laser_lu 2010-01-12 13:55
期待Mono的进一步发展!
24 楼 anyu 2009-09-02 15:44
小白·菜 写道
C#语言再牛也也不可在linux下面跑,有什么意义呢?(我是说官方支持,玩票的就算了)
windows服务器那叫一个烂。。。


想动态java也有阿。groovy jpython jruby。。。

这么多菜鸟呀,还不知道linux下早就有Mono了.C#在linux也可以用的.目前支持到2.0了.菜鸟不知道就不要瞎叫.
23 楼 anyu 2009-09-02 15:43
这么多菜鸟呀,还不知道linux下早就有Mono了.C#在linux也可以用的.目前支持到2.0了.菜鸟不知道就不要瞎叫.
22 楼 mooniscrazy 2008-12-12 11:59
c# 4.0的确不错。动态语言是编程语言发展的方向。从总体看来,编程语言趋向于越来越灵活。对编程语言本身进行编程,意味着极大的灵活性。从描述能力来看,它的描述能力更强了。
21 楼 fzqyfzqy 2008-11-14 12:27
eoeac 写道

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html虽然说明不了太多问题...

引用

    [*]

    [*]

    [*]


    [*]
[url][/url][flash=200,200][/flash]           ops:          [color=red][/color]
20 楼 careprad 2008-11-06 14:21

嗨呀 hoya
19 楼 gurudk 2008-11-05 14:14
yangdong 写道

感谢作者的新闻!我在 C# 3.0 出现不久后就转到 Java 了。很惊叹 .NET 发展的速度。C# 已经支持动态代码的编译和运行了,加上现在把功能又做得这么简单,我个人认为有理由相信 MS 以后可以成功地把动态语言和静态语言统一起来。而最后一个 CustomMetaObject 的例子让我更惊讶,如果我没有理解错,这更像是一个官方支持的 AOP 功能。结合 C# 添加的动态特性,我已经想象不出还有什么做不到的了……相比之下,Java 的反映比较迟缓。虽说语言太复杂并不是好事,比如 C++。但我个人认为静态语言支持一定的动态特性并提供 AOP 的支持是大势所趋。Java 的迟缓在我看来是有点致命的。C# 现在无法在大型项目上获得广泛支持在我看来无非是因为 MS 的技术垄断给大公司带来了太高的技术风险。但是 MS 已经把 .NET 平台的源码公开了“一半”。如果哪一天整个 .NET 平台的授权协议改成和 Java 一样,那 Sun 的麻烦就大了。所幸 MS 似乎永远都不会这么干。


先天不足后天补没用的,只能运行在windows平台上。
看着吧,微软成也windows,败也windows.
18 楼 qhfrose 2008-11-03 19:07
qdzheng 写道

C#也算是成功吗?VB也曾经很成功的。在大型企业里,C#有什么成功能案例吗?

MySpace,互联星空,不过是网站.
企业应用也很多,不过主要是在中小型企业,当然在数量上确实比起Java少多了.
17 楼 hongliang 2008-11-02 13:46
貌似愚蠢的新闻稿和激烈的评论都被重新修改和整理过,这篇新闻现在看上去比较正常叻,我再踩一脚就走
16 楼 zjumty 2008-11-02 13:25
Groovy??
15 楼 ray_linn 2008-11-02 10:25
KKFC 写道

不就是和ECMAScript 4的思想嘛,只不过 E4 从 动态 -》 静态;   C # 4从 静态 -》 动态 合久必分,分久必合...都是小样的



与其说是ECMAScript 4,不如说是C#走向VB吧
14 楼 ray_linn 2008-11-02 10:24
wangding263 写道

不知道 增强了动态性后, vs ide对动态块里面的智能感知如何?


会有问题的,因为是动态块,所以显然无法感知.
13 楼 kaipingk 2008-11-02 09:38
这应该会是个维护噩梦吧
12 楼 KKFC 2008-11-02 09:30
不就是和ECMAScript 4的思想嘛,只不过 E4 从 动态 -》 静态;  


C # 4从 静态 -》 动态

合久必分,分久必合...都是小样的
11 楼 wangding263 2008-11-02 08:54
不知道 增强了动态性后, vs ide对动态块里面的智能感知如何?
10 楼 elgs 2008-11-02 01:04
但它只能运行在Windows,没有什么企业会把自己的关键业务建立在Windows上。
9 楼 ahomer 2008-11-01 23:52
c# 4.0??这个名词很奇怪,应该是.net4.0吧
语言只是工具而已,分哪么彻底干吗???
j
8 楼 lijinyan3000 2008-11-01 22:46
不可否认C#是一门成功的语言。
7 楼 e_sky 2008-11-01 20:45
C# 语言很好 但很不喜欢 .net平台.封装到无耻的境界.
6 楼 sdh5724 2008-11-01 20:04
    除了少数几家大型IT公司用MS的服务器, 我找不到更多的。 winwdows对于大规模群集的控制能力决定了, c#就是再好, 也难以成为企业级开发的主流。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • [连载]C#程序设计(01)--- .NET概述

    不可否认,有无数的程序以这种费时的方式成功的开发出来了,但是多数人都认为使用原始API构造应用程序是一项复杂的工作。 C语言是一种非常简练的语言(而且到现在为止仍然是具有统治地位的语言,也是我最钟爱的语言...

  • Silverlight与微软技术(下):微软技术与技术学习

    这种观点在微软技术社区内部和外部都有出现,似乎是一个不争的事实。但从我追随.NET平台这近十年的时间里,我并没有明显的感觉。微软的技术的确很多,但至少在.NET领域过渡性做的非常好,我没有任何疲惫之感。微软...

  • 《做Java开发这一年》---看.net 和 Java的对比

    从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。...语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到的,用Java需

  • 微软技术与技术学习

    原文地址:http://www.cnblogs.com/JeffreyZhao/archive/2010/11/05/silverlight-and-microsoft-technology-2-microsoft-technology-and-how-to-learn.html ...这种观点在微软技术社区内部和外部都有出现,似乎是一个

  • Visual Basic .NET程序设计 学习路线

    写给VB.NET新手的入门介绍二笔青年模块10这是一篇我很早很早以前写的文章,...在网络上,C#的教程、文档、讨论比比皆是,但是VB.NET的教程(特指优秀的)却寥寥无几,至少我自学VB.NET就从来都没有从这些教程中受益过。

  • 做java开发这一年

    从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。...语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到

  • 做Java开发这一年

    做Java开发这一年 (from 博客园) 2011-06-28 11:57 by 横刀天笑 从去年到现在,从.NET转向Java开发(只是因为项目...我原来是使用C#语言的,和现在的Java语言相比,现在的Java语言语法就停留在C# 2.0这个

  • 做Java开发的这一年

    语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到的,用Java需要写很多废话代码。 前几天InfoQ上发表了一篇英国卫报逐步采用Scala替换Java的文章里一句话用的很好:

  • WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)

    一. 摘要  首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个...之前一直都没有想过要录制视频,主要的原因还是怕自己知识有限,从而误导他人,所以前几次浪曦和51CTO邀请录制视频,我都以工作忙、公司内部

  • 转载:做Java开发这一年 (火龙果软件)

    从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。...我原来是使用C#语言的,和现在的Java语言相比,现在的Java语言语法就停留在C# 2.0这个年代。语法结构...

  • 统考计算机应用基础考试大纲(2013年修订版).doc

    统考计算机应用基础考试大纲(2013年修订版).doc

  • 基于机器学习的区域现代化水平指数分析

    内容概要:本文基于机器学习方法,探讨了中国区域现代化水平及其对经济效益的影响。研究首先构建了现代化发展评价指标体系,涵盖了经济、科技、人文、社会和文化五个维度,并采用突变级数法和熵权法计算出组合期望值。接着,利用BP神经网络模型对区域现代化水平指数进行拟合,结果显示我国现代化水平存在显著的区域差异,呈现东部沿海地区较高、西部内陆地区较低的特征。最后,通过随机森林模型分析发现,经济现代化和科技创新现代化是影响GDP最重要的两个因素,文化现代化次之,而人文和社会现代化的影响相对较小。;

  • 电机控制领域本杰明磁链模型的闭环带载启动与代码优化实践

    内容概要:本文详细介绍了本杰明磁链模型在电机控制领域的应用,特别是在闭环带载启动方面的优势。文章首先展示了磁链模型的核心参数初始化及其精确性要求,接着深入探讨了磁链观测器的设计与实现,包括其微分方程、积分器以及遗忘因子的作用。文中还讨论了代码生成过程中遇到的问题及解决方案,如MATLAB生成代码的效率优化和查表法的应用。此外,文章介绍了带载启动的具体策略,包括转速-电流双闭环嵌套控制和滑模控制器的应用,并分享了实际测试数据和效果。最后,文章提供了调试经验和实战案例,强调了模型的鲁棒性和实用性。 适合人群:从事电机控制系统设计与开发的工程师和技术人员,尤其是关注高性能带载启动解决方案的专业人士。 使用场景及目标:适用于需要提高电机启动可靠性和稳定性的应用场景,如工业自动化设备、物流AGV等。目标是通过引入本杰明磁链模型,实现高效稳定的带载启动,减少启动时的电流波动和机械振动。 其他说明:本文不仅提供了理论分析,还包括大量实际代码示例和调试技巧,帮助读者更好地理解和应用这一先进技术。

  • 三电平NPC有源电力滤波器无差拍控制的MATLAB仿真与实现

    内容概要:本文详细介绍了三电平NPC(Neutral Point Clamped)有源电力滤波器(APF)采用无差拍控制方法的MATLAB仿真过程。首先阐述了三电平NPC拓扑的优势及其在高压大功率场景的应用背景,接着深入探讨了无差拍控制的核心数学模型,包括电流预测、调制环节以及中点电位平衡处理。文中还提供了具体的MATLAB代码片段,展示了如何实现电流误差的前馈补偿、三电平PWM生成、SVPWM矢量切换逻辑等关键技术。此外,文章强调了仿真过程中需要注意的关键参数设置,如采样时间、电感值、调制策略等,并分享了一些常见的调试技巧和潜在问题的解决方案。 适用人群:从事电力电子、电力系统自动化领域的研究人员和技术人员,尤其适用于对有源电力滤波器和无差拍控制感兴趣的工程师。 使用场景及目标:①理解和掌握三电平NPC APF的工作原理和无差拍控制策略;②利用MATLAB/Simulink进行相关仿真的设计与调试;③提高谐波补偿效果,降低THD(总谐波失真),提升系统的动态响应性能。 其他说明:文章不仅提供了详细的理论分析和代码实现,还分享了许多实践经验,帮助读者更好地应对实际应用中的挑战。同时,提醒读者注意仿真环境与实际情况之间的差异,确保最终设计方案的可行性和可靠性。

  • HBase 是一个基于 Hadoop 的分布式、面向列的 NoSQL 数据库,适用于海量数据存储与实时读写

    hbase的安装与简单操作

  • 基于COMSOL仿真的变压器三相短路绕组振动及电磁力分析

    内容概要:本文详细介绍了使用COMSOL软件进行变压器三相短路工况下绕组振动及电磁力的仿真分析。首先,通过定义绕组几何参数和材料属性,构建了电磁场和固体力学的多物理场耦合模型。然后,利用参数化扫描和频域电磁分析方法,精确模拟了短路瞬间的电磁场分布、轴向力、径向力以及磁密分布情况。接下来,在固体力学模块中引入瑞利阻尼和初始应力设置,实现了对绕组振动特性的动态仿真。最后,通过对仿真结果的后处理,得到了振动位移、力分布和频谱分析等重要数据,揭示了短路工况下绕组的复杂力学行为及其优化方向。 适合人群:从事电力设备设计、电磁兼容性和结构动力学研究的专业技术人员,尤其是有一定COMSOL仿真经验的研究人员。 使用场景及目标:适用于变压器设计过程中评估短路工况对绕组的影响,帮助工程师理解并解决因短路引起的振动和应力问题,从而提高变压器的安全性和可靠性。 其他说明:文中提供了详细的建模步骤和技术细节,强调了正确选择坐标系、材料参数和阻尼设置的重要性,并分享了一些避免常见错误的经验。

  • CATIA DMU中麦弗逊悬架与齿轮齿条转向系统的非参数化运动仿真及应用

    内容概要:本文详细介绍了如何在CATIA DMU模块中进行麦弗逊式独立悬架与齿轮齿条转向器的非参数化运动仿真。首先,文章解释了底盘结构及其运动特性,接着逐步展示了如何设置悬架和转向系统的运动副,包括旋转副、滑动副以及齿轮齿条副的具体配置方法。文中还特别强调了仿真过程中需要注意的技术细节,如参数设置、摩擦系数的选择、运动自由度的限制等。此外,作者分享了一些实用技巧,比如通过正弦函数驱动转向输入、利用传感器监测运动状态、导出并修改仿真动画等。 适合人群:从事汽车工程设计、机械仿真的工程师和技术人员,尤其是熟悉CATIA软件的用户。 使用场景及目标:适用于需要进行车辆转向系统和悬架系统联合仿真的场合,帮助工程师更好地理解和优化车辆动态性能,提高设计效率。 其他说明:文章提供了大量具体的VBA代码片段,便于读者直接应用于自己的项目中。同时,文中提到的一些调试经验和常见问题解决方法也非常有价值。

  • 蓝色企业CMS网站后台管理模板

    蓝色企业CMS网站后台管理模板

  • HBase 的安装与简单操作教程

    HBase 是基于 Java 开发的,需要安装 Java 8 或更高版本。可以通过在命令行中输入java -version来检查 Java 版本,如果未安装则需先安装 Java。HBase 依赖于 Hadoop 的分布式文件系统(HDFS)来存储数据,需要先安装并配置好 Hadoop 集群。确保 Hadoop 的相关服务(如 HDFS、YARN 等)已经正常启动。

Global site tag (gtag.js) - Google Analytics