阅读更多

63顶
34踩

编程语言

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

2008-10-31 14:31 by 见习记者 ray_linn 评论(25) 有22477人浏览
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这个年代。语法结构...

  • FPGA电机控制方案解析:基于Verilog与Nios2的软硬协同设计

    内容概要:本文详细介绍了基于FPGA的电机控制系统设计方案,重点探讨了Verilog和Nios2软核的协同工作。系统通过将底层驱动(如编码器处理、坐标变换、SVPWM生成等)交给Verilog实现,确保实时性和高效性;同时,复杂的算法(如Park变换、故障保护等)则由Nios2处理。文中展示了多个具体实现细节,如四倍频计数、定点数处理、查表法加速、软硬件交互协议等。此外,还讨论了性能优化方法,如过调制处理、五段式PWM波形生成以及故障保护机制。 适合人群:具备一定FPGA和嵌入式系统基础知识的研发人员,尤其是从事电机控制领域的工程师。 使用场景及目标:适用于希望深入了解FPGA在电机控制中的应用,掌握软硬件协同设计方法,提高系统实时性和效率的技术人员。目标是通过学习本方案,能够独立设计并实现高效的电机控制系统。 其他说明:本文不仅提供了详细的代码片段和技术细节,还分享了许多实践经验,如调试技巧、常见错误及其解决办法等。这对于实际工程项目非常有帮助。

  • 模拟太阳系、轨道进动、时间延迟、光线偏折、黑洞阴影、星团以及航天器轨迹 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 计算机数控(CNC)装置.pdf

    计算机数控(CNC)装置.pdf

  • 西门子PLC与TiA博途实现冷热水恒压供水系统的变频器控制及多参数调控

    内容概要:本文详细介绍了使用西门子PLC和TiA博途软件构建冷热水恒压供水系统的具体方法和技术要点。主要内容涵盖变频器控制、模拟量输入输出处理、温度控制、流量计算控制及配方控制等方面。文中不仅提供了具体的编程实例,如LAD和SCL语言的应用,还分享了许多实用的经验和技巧,例如模拟量处理中的滤波方法、PID控制的优化策略、流量计算的高精度算法等。此外,针对实际应用中的常见问题,如信号干扰和参数整定,作者也给出了有效的解决方案。 适合人群:从事自动化控制系统开发的技术人员,尤其是对西门子PLC和TiA博途有一定了解并希望深入掌握冷热水恒压供水系统设计的专业人士。 使用场景及目标:适用于工业环境中需要精确控制水压、温度和流量的冷热水供应系统的设计与维护。主要目标是帮助工程师理解和实施基于西门子PLC和TiA博途的冷热水恒压供水系统,提高系统的稳定性和效率。 其他说明:文中提到的实际案例和编程代码片段对于初学者来说非常有价值,能够加速学习进程并提升实际操作能力。同时,关于硬件配置的选择建议也为项目规划提供了指导。

  • 基于PLC的自动蜂窝煤生产线五传送带控制系统设计与实现

    内容概要:本文详细介绍了基于PLC(可编程逻辑控制器)的自动蜂窝煤生产线中五条传送带的控制系统设计。主要内容涵盖IO分配、梯形图程序编写、接线图原理图绘制以及组态画面的设计。通过合理的IO分配,确保各个输入输出点正确连接;利用梯形图程序实现传送带的启动、停止及联动控制;接线图确保电气连接的安全性和可靠性;组态画面提供人机交互界面,便于操作员远程监控和操作。此外,还分享了一些实际调试中的经验和教训,如传感器安装位置、硬件接线注意事项等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和工业自动化感兴趣的读者。 使用场景及目标:适用于需要设计和实施自动化生产线的企业和个人。目标是提高生产线的自动化程度,减少人工干预,提升生产效率和产品质量。 其他说明:文中提到的具体实例和代码片段有助于读者更好地理解和掌握相关技术和方法。同时,强调了硬件和软件相结合的重要性,提供了实用的调试技巧和经验总结。

  • 自动驾驶仿真中OpenScenario XML语法与场景构建详解

    内容概要:本文详细介绍了OpenScenario场景仿真的结构及其应用,特别是通过具体的XML代码片段解释了各个参数的作用和配置方法。文中提到的思维导图帮助理解复杂的参数关系,如Storyboard、Act、ManeuverGroup等层级结构,以及它们之间的相互作用。同时,文章提供了多个实用案例,如跟车急刹再加速、变道场景等,展示了如何利用这些参数创建逼真的驾驶场景。此外,还特别强调了一些常见的错误和解决方法,如条件触发器的误用、坐标系转换等问题。 适用人群:从事自动驾驶仿真研究的技术人员,尤其是对OpenScenario标准有一定了解并希望深入掌握其应用场景的人。 使用场景及目标:适用于需要精确控制交通参与者行为的自动驾驶仿真项目,旨在提高开发者对OpenScenario的理解和运用能力,减少开发过程中常见错误的发生。 其他说明:文章不仅提供了理论指导,还包括大量实践经验分享,如调试技巧、参数优化等,有助于快速解决问题并提升工作效率。

  • 基于Maxwell仿真的30kW自启动永磁同步电机6极72槽设计方案及性能优化

    内容概要:本文详细介绍了30kW、1000rpm、线电压380V的自启动永磁同步电机的6极72槽设计方案及其性能优化过程。首先,通过RMxprt进行快速建模,设定基本参数如电机类型、额定功率、速度、电压、极数和槽数等。接着,深入探讨了定子冲片材料选择、转子结构设计、绕组配置以及磁密波形分析等方面的技术细节。文中特别强调了双层绕组设计、短距跨距选择、磁密波形优化、反电势波形验证等关键技术手段的应用。此外,还讨论了启动转矩、效率曲线、温升控制等方面的优化措施。最终,通过一系列仿真和实测数据分析,展示了该设计方案在提高效率、降低谐波失真、优化启动性能等方面的显著成果。 适合人群:从事电机设计、电磁仿真、电力电子领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解永磁同步电机设计原理及优化方法的专业人士,旨在为类似项目的开发提供参考和借鉴。 其他说明:文章不仅提供了详细的参数设置和代码示例,还分享了许多实践经验,如材料选择、仿真技巧、故障排除等,有助于读者更好地理解和应用相关技术。

  • 基于S7-1200 PLC和WinCC的燃油锅炉控制系统设计与实现

    内容概要:本文详细介绍了如何使用S7-1200 PLC和WinCC搭建一个完整的燃油锅炉自动控制系统。首先明确了系统的IO分配,包括数字量输入输出和模拟量输入输出的具体连接方式。接着深入讲解了梯形图编程的关键逻辑,如鼓风机和燃油泵的联锁控制、温度PID调节等。对于接线部分,强调了强电弱电线缆分离以及使用屏蔽线的重要性。WinCC组态方面,则着重于创建直观的操作界面和有效的报警管理。此外,还分享了一些调试技巧和常见问题的解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和SCADA系统有一定了解的人群。 使用场景及目标:适用于需要构建高效稳定的燃油锅炉控制系统的工业环境,旨在提高系统的可靠性和安全性,降低故障率并提升工作效率。 其他说明:文中提供了丰富的实践经验,包括具体的硬件选型、详细的程序代码片段以及实用的故障排查方法,有助于读者快速掌握相关技能并在实际工作中应用。

  • 电力电子领域中逆变器输出纹波电流预测与变开关频率PWM控制的Simulink仿真

    内容概要:本文详细探讨了逆变器输出纹波电流的来源及其对系统稳定性的影响,并提出了一种基于变开关频率PWM控制策略的解决方案。文中首先分析了纹波电流产生的原因,包括开关元件的导通关断、电感电流的非理想特性和电源电压波动。接着介绍了变开关频率PWM控制的基本原理,通过实时调整开关频率来优化纹波电流和开关损耗之间的平衡。随后,利用傅里叶变换建立了纹波电流预测模型,并通过Simulink仿真模型进行了验证。仿真结果显示,变开关频率控制能够显著减小纹波电流的幅值,提高系统的稳定性和效率。此外,文章还提供了具体的MATLAB/Simulink建模步骤以及一些优化建议,如提高开关频率上限、采用低纹波PWM算法和增加电感电流反馈。 适合人群:从事电力电子系统设计和优化的研究人员和技术人员,尤其是关注逆变器性能提升的专业人士。 使用场景及目标:适用于需要优化逆变器输出质量、提高系统稳定性和效率的应用场合。目标是通过变开关频率PWM控制策略,解决传统固定开关频率控制中存在的纹波电流大、效率低等问题。 其他说明:文章不仅提供了理论分析,还包括详细的仿真建模指导和优化建议,有助于读者更好地理解和应用相关技术。同时,文中提到的一些实用技巧和注意事项对于实际工程应用具有重要参考价值。

Global site tag (gtag.js) - Google Analytics