锁定老帖子 主题:喜欢或者厌恶MS,都要看看 C# 4.0
精华帖 (1) :: 良好帖 (14) :: 新手帖 (0) :: 隐藏帖 (14)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-31
你的想法是类似于某个进程运行的时候,你通过console命令去控制进程的运行逻辑。 通过console输入代码,然后balabala,这个进程的内部逻辑就给修改过了.
|
|
返回顶楼 | |
发表时间:2008-11-01
static void DoSomethingDynamic(Object thing) { try { Method m = thing.getClass().getMethod("act"); m.invoke(thing); } catch(NoSuchMethodException e) { System.out.println("thing does not implement Act"); } } 看起来倒貌似在编译器上做了件这样的事情。 引用 就当java们还在为要不要在java中添加闭包、扩展方法而吵吵闹闹的时候,C# 4.0又开始添加新的技术特点,这次它的老师不再是老大笨重的java,而是来自动态语言python与ruby。和java社区开源,思想封闭的情况不一样,MS fans们以极大的热情和开放的心态,投入这场静态语言与动态语言的融合中去。
我们有Groovy、Jython、JRuby、Rhino、以及Scala,以及强大的JSR-223,谁说封闭了?只是我还得为那令人苦恼的is、was、has、大小写转换规则抓狂,谁说要引入property关键字了?我们有强大的javabean Introspector,我们只用getter/setter!关键字太多会引起混乱,java语法绝对不能太复杂! |
|
返回顶楼 | |
发表时间:2008-11-01
fyting 写道 static void DoSomethingDynamic(Object thing) { try { Method m = thing.getClass().getMethod("act"); m.invoke(thing); } catch(NoSuchMethodException e) { System.out.println("thing does not implement Act"); } } 看起来倒貌似在编译器上做了件这样的事情。 引用 就当java们还在为要不要在java中添加闭包、扩展方法而吵吵闹闹的时候,C# 4.0又开始添加新的技术特点,这次它的老师不再是老大笨重的java,而是来自动态语言python与ruby。和java社区开源,思想封闭的情况不一样,MS fans们以极大的热情和开放的心态,投入这场静态语言与动态语言的融合中去。
我们有Groovy、Jython、JRuby、Rhino、以及Scala,以及强大的JSR-223,谁说封闭了?只是我还得为那令人苦恼的is、was、has、大小写转换规则抓狂,谁说要引入property关键字了?我们有强大的javabean Introspector,我们只用getter/setter!关键字太多会引起混乱,java语法绝对不能太复杂! 我说得是java语言本身,Groovy这些都是社区的,.net社区也全有.但是java语言本身的进度却落后了. 反射能起到Ducking type的一部分作用,但不可能是全部,或者你得写一大段大而全的反射,来指望我输入的是什么,比如说,thing[12], thing++; thing=thing*6; |
|
返回顶楼 | |
发表时间:2008-11-01
还是思归的例子有说服力,怎样实现ruby的method_missing
http://blog.joycode.com/saucer/archive/2008/10/31/115330.aspx namespace ConsoleApplication1 { class Data { public int ID { get; set; } public string Name { get; set; } public string Value { get;set;} } //这里使用了CTP版本中IDynamic Object Example例程中的IDOHelper项目中的Dynamic类以减少代码量 class MyClass : System.Scripting.Actions.Dynamic { List<Data> data; public MyClass() { data = new List<Data>{ new Data {ID=1,Name="abc",Value="hello world" }, new Data {ID=2,Name="def",Value="hello joycode"}, }; } public string Find(int id) { if (id <= 0 || id > 2) throw new ArgumentException("cannot handle this parameter:" + id.ToString()); return Find(d => d.ID == id); } public override object Call(CallAction action, params object[] args) { if (action.Name == "Find" || action.Name == "FindByID") return Find((int)args[0]); else if (action.Name == "FindByName") return Find(d => d.Name == (string)args[0]); //当然,在这里,你可以发挥想象力,实现任何你能想到的方法 throw new NotSupportedException(); } private string Find(Predicate<Data> p) { Data d = data.Find(p); if (d == null) return String.Empty; return d.Value; } } } 在客户端代码里,你可以这样 dynamic m = new MyClass(); Console.WriteLine(m.Find(1)); //Find方法在类中有声明,但其实还是通过Call方法来调用的 Console.WriteLine(m.FindByID(2)); //但FindByID则没有声明 Console.WriteLine(m.FindByName("def")); //FindByName也没有声明 |
|
返回顶楼 | |
发表时间:2008-11-01
我曾经需要一个c#版本的method_missing,用来做某个事情,不过没有找到。现在连想干什么都忘记了。不过这个好像还是4.0,到能用,还是需要点时间的
|
|
返回顶楼 | |
发表时间:2008-11-01
ray_linn 写道 fyting 写道 static void DoSomethingDynamic(Object thing) { try { Method m = thing.getClass().getMethod("act"); m.invoke(thing); } catch(NoSuchMethodException e) { System.out.println("thing does not implement Act"); } } 看起来倒貌似在编译器上做了件这样的事情。 引用 就当java们还在为要不要在java中添加闭包、扩展方法而吵吵闹闹的时候,C# 4.0又开始添加新的技术特点,这次它的老师不再是老大笨重的java,而是来自动态语言python与ruby。和java社区开源,思想封闭的情况不一样,MS fans们以极大的热情和开放的心态,投入这场静态语言与动态语言的融合中去。
我们有Groovy、Jython、JRuby、Rhino、以及Scala,以及强大的JSR-223,谁说封闭了?只是我还得为那令人苦恼的is、was、has、大小写转换规则抓狂,谁说要引入property关键字了?我们有强大的javabean Introspector,我们只用getter/setter!关键字太多会引起混乱,java语法绝对不能太复杂! 我说得是java语言本身,Groovy这些都是社区的,.net社区也全有.但是java语言本身的进度却落后了. 反射能起到Ducking type的一部分作用,但不可能是全部,或者你得写一大段大而全的反射,来指望我输入的是什么,比如说,thing[12], thing++; thing=thing*6; 大叔,您又较真了,我后面那段在反讽呢。得,马屁没拍好,怪我表达能力有问题,前后说了两件事,我反思,我悔过。 |
|
返回顶楼 | |
发表时间:2008-11-02
这段利用 dymanic 搞的东西
excel.activesheet.cell[1,1]=value; 让C#看起来和VBA有点象啊 |
|
返回顶楼 | |
发表时间:2008-11-11
下一站,火星 写道 太长了,看了开头就读不下去了
2个疑问 1 开放:在linux下跑c#的举个手 2 ironruby的胜局:用这个做过应用的举个手 有时间在和你慢慢扯 我现在就在linux下面跑c#。关键是,代码要在mono上先测试。 |
|
返回顶楼 | |
发表时间:2009-03-12
脚踏两个阵营的我,
一直觉得在语言上c#走的更稳更远~~ c#没有groovy,dynamic proxy java没有linq和delegate,emit,wpf,pointer .... 这样都不是关键,有第三方的类库或是类似的东西~~ 他们本质上并没有xxx,语言之争也没有啥必要,~~ 合适自己的就是当前最好的~~ --------------------------------------------- 虽然目前工作用java, 但就目前的语言主体来说,感觉java越来越难写,c#越来越优雅 |
|
返回顶楼 | |
发表时间:2009-03-12
工作用java
自己玩,一般都是c#,核心类库强大,工具完备, 不需要翻箱倒柜找jar包,搭环境~~ 调试也爽,可以回退~~ 貌似java的IDE都不支持~~ |
|
返回顶楼 | |