阅读更多

63顶
34踩

编程语言

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

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

  • 基于vue的菜谱网站,前端采用vue,后端采用express,数据库采用mysql。.zip-毕设&课设&实训&大作业&竞赛&项目

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

  • 数据分析全流程指南:从基础知识到实战项目的Python&R生态应用

    内容概要:本文档提供了关于数据分析全面的知识介绍与实战资源链接。首先,在数据分析的基础教程部分讲述了使用Python以及R两种语言来进行实际的数据分析工作所需具备的各项基本技能。其次,进阶教程涵盖从机器学习到深度学习的概念及其Python具体应用场景。接着,在工具有效利用层面介绍了多种热门库与平台的作用特点。在项目实践中,列举了四个实战案例:Titanic幸存者预测、房价预测、社交媒体情感倾向分析以及市场顾客购买模式研究,每个项目都有详细的技术流程指引。另外列出多个外部网站资源供进一步提升学习。 适用人群:本文主要面向有志于从事数据挖掘工作的学生和技术爱好者,同时也可辅助在职人士自我能力进阶。无论是在学术科研还是实际业务需求环境中都值得研读。 使用场景及目标:学习者将能够获取到系统的理论知识体系,熟悉业界主流软件包的功能优势,掌握具体业务问题解决方案路径,提高自身的综合技术素质,从而为个人职业规划增添竞争力。 其他说明:文档里推荐了不少高质量参考资料和实用线上学习社区,能有效补充专业知识空白并促进社交协作交流。

  • 从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

    从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

  • 复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE

    复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE差分进化算法求最优化问题 对配套文献所提出的改进的L-SHADE差分进化算法求解最优化问题的的复现,提供完整MATLAB源代码和测试函数集,到手可运行,运行效果如图2所示。 代码所用测试函数集与文献相同:对CEC2014最优化测试函数集中的全部30个函数进行了测试验证,运行结果与文献一致。 ,复现; 改进的L-SHADE差分进化算法; 最优化问题求解; MATLAB源代码; 测试函数集; CEC2014最优化测试函数集,复现改进L-SHADE算法:最优化问题的MATLAB求解与验证

  • DCDC 电阻分压计算器

    可选择参考电压与输出电压 可选择电阻精度以及输出电压误差值

  • 西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与

    西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与V14及以上版本技术参考,西门子1200博途三部十层电梯程序案例,加Wincc RT Professional画面三部十层电梯程序,版本V14及以上。 程序仅限于参考资料使用。 ,西门子;1200博途;三部十层电梯程序案例;Wincc RT Professional;V14以上程序版本。,西门子V14+博途三部十层电梯程序案例:Wincc RT Pro专业画面技术解析

  • 2023政务大数据解决方案.pptx

    2023政务大数据解决方案.pptx

  • 基于SSM设计的校园二手物品交易网站

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

  • 基于java的学业跟踪评价系统设计的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了基于Java的学业跟踪评价系统的详细设计与实现,涵盖系统的多维度数据整合与评价、智能化学习建议、数据可视化和实时反馈等方面。系统通过收集课堂表现、作业成绩、考试成绩等多源数据,对学生的学业表现进行全面跟踪和评价,提供可视化反馈以及个性化的学习建议,促进家校互动,助力学生全面素质提升和发展。 适合人群:具备一定Java编程经验的研究者和开发者,特别是从事教育信息化领域的从业人员和技术爱好者。 使用场景及目标:该系统主要用于K12教育阶段、高等教育以及其他涉及教育培训的场景。其目的是提高教育管理效率、推进教育数字化转型和个人化教育实施。 其他说明:该文档详细介绍了系统的设计思路、功能模块和技术细节,并提供了完整的程序代码以及GUI设计说明。对于希望深入了解或实际部署学业跟踪评价系统的机构非常有参考价值。文中强调技术创新与实践经验相结合,突出了实用性和前瞻性特点。

Global site tag (gtag.js) - Google Analytics