论坛首页 编程语言技术论坛

喜欢或者厌恶MS,都要看看 C# 4.0

浏览 9175 次
精华帖 (1) :: 良好帖 (14) :: 新手帖 (0) :: 隐藏帖 (14)
作者 正文
   发表时间:2008-10-31  
你的想法是类似于某个进程运行的时候,你通过console命令去控制进程的运行逻辑。 通过console输入代码,然后balabala,这个进程的内部逻辑就给修改过了.
0 请登录后投票
   发表时间: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语法绝对不能太复杂!
0 请登录后投票
   发表时间: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;
0 请登录后投票
   发表时间: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也没有声明
0 请登录后投票
   发表时间:2008-11-01  
我曾经需要一个c#版本的method_missing,用来做某个事情,不过没有找到。现在连想干什么都忘记了。不过这个好像还是4.0,到能用,还是需要点时间的
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;

大叔,您又较真了,我后面那段在反讽呢。得,马屁没拍好,怪我表达能力有问题,前后说了两件事,我反思,我悔过。
0 请登录后投票
   发表时间:2008-11-02  
这段利用 dymanic 搞的东西


excel.activesheet.cell[1,1]=value;



让C#看起来和VBA有点象啊
0 请登录后投票
   发表时间:2008-11-11  
下一站,火星 写道
太长了,看了开头就读不下去了
2个疑问
1 开放:在linux下跑c#的举个手

2 ironruby的胜局:用这个做过应用的举个手

有时间在和你慢慢扯

我现在就在linux下面跑c#。关键是,代码要在mono上先测试。
0 请登录后投票
   发表时间:2009-03-12  
脚踏两个阵营的我,
一直觉得在语言上c#走的更稳更远~~

c#没有groovy,dynamic proxy
java没有linq和delegate,emit,wpf,pointer
....

这样都不是关键,有第三方的类库或是类似的东西~~
他们本质上并没有xxx,语言之争也没有啥必要,~~
合适自己的就是当前最好的~~

---------------------------------------------
虽然目前工作用java,
但就目前的语言主体来说,感觉java越来越难写,c#越来越优雅


0 请登录后投票
   发表时间:2009-03-12  
工作用java

自己玩,一般都是c#,核心类库强大,工具完备,
不需要翻箱倒柜找jar包,搭环境~~
调试也爽,可以回退~~ 貌似java的IDE都不支持~~
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics