阅读更多

63顶
34踩

编程语言

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

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

  • 基于粒度计算的旅游定制公交初设线路优选——以长岛县定制旅游公交为例.pdf

    基于粒度计算的旅游定制公交初设线路优选——以长岛县定制旅游公交为例.pdf

  • CSDNApp_242.apk

    CSDNApp_242.apk

  • C++如何读取ZIP内容文件

    C++如何读取ZIP内容文件

  • Java毕业设计-springboot-vue-医院后台管理系统(源码+sql脚本+29页零基础部署图文详解+32页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

  • 水下机器人AUV的路径规划及基于模型预测控制MPC的跟踪框架实现与解析,4-IEEE trans顶刊复现,水下机器人AUV的路径规划和基于模型预测控制MPC的跟踪框架 参考文献和建模过程请参考图片中

    水下机器人AUV的路径规划及基于模型预测控制MPC的跟踪框架实现与解析,4-IEEE trans顶刊复现,水下机器人AUV的路径规划和基于模型预测控制MPC的跟踪框架。 参考文献和建模过程请参考图片中的文章,本代码包括路径规划和MPC路径跟踪两个模块,两个模块均采用优化求解器求解,考虑了AUV的水动力学模型,结果是2D空间内的平面路径。 输出的结果请见下图 ,关键词:IEEE trans顶刊复现; 水下机器人AUV; 路径规划; 模型预测控制MPC; 跟踪框架; 优化求解器; 水动力学模型; 2D空间平面路径。,基于IEEE Trans顶刊复现的AUV路径规划与MPC跟踪框架研究

  • 《已调试》springboot 网站建设服务系统(源码+sql).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

  • Java毕业设计-springboot-vue-购物推荐网站(源码+sql脚本+29页零基础部署图文详解+28页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

  • 2023-04-06-项目笔记 - 第三百八十二阶段 - 4.4.2.380全局变量的作用域-380 -2025.01.18

    2023-04-06-项目笔记-第三百八十二阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.380局变量的作用域_380- 2025-01-18

  • 基于springboot+vue社区老年人帮扶系统-6u870vlh.zip

    基于springboot+vue社区老年人帮扶系统_6u870vlh.zip

Global site tag (gtag.js) - Google Analytics