学习C#中.希望大家给点信心.
java中可以有以下实例化代码:class1 c1 = new class1() {
            public void function1() {
                System.Console.WriteLine("blabla.");
            }
            public String toString() { return "bla"; }
        } 这在C#中应该如何简洁实现?
另外,关于线程操作的Runnable接口\synchronized\wait\notify在C#中怎么实现?

解决方案 »

  1.   

    C#不支持完整功能的匿名类,不过支持委托,可以这么写:var c1 = new {
                function1 = new Action(() => {
                    Console.WriteLine("blabla.");
                }),
                toString() = new Func<string>(x =>"bla")
            };
    c1.function1();
    string s = c1.toString();
      

  2.   

    var c1 = new {
                function1 = new Action(() => {
                    Console.WriteLine("blabla.");
                }),
                toString = new Func<string>(x =>"bla")
            };
    c1.function1();
    string s = c1.toString();
      

  3.   

    C#有委托,不需要什么Runable接口。线程同步,C#有Monitor lock Mutex Thread.Join Event 等等。
      

  4.   


        public static void main( String[] args ) {
            class1 c1 = new class1( new interface1() {
                public void interfacefunction1( var i2 ) {
                    System.output.println( "interface2 run" );
                }
                public int interfacefunc2( int p1 ) {
                    System.output.println( "bla."));
                    return 0;
                }
            } );
        }如果是这个呢?
      

  5.   

    那就没办法了。不过可以这样:class interface1Adapter : interface1
    {
        private Action<object> f1;
        private Func<imt, int> f2;
        public interface1Adapter(Action<object> interfacefunction1, Func<imt, int> interfacefunc2)
        {
            f1 = interfacefunction1;
            f2 = interfacefunc2;
        }
        public void interfacefunction1(object i2) { f1(i2); }
        public int interfacefunc2(int p1) { return f2(p1); }
    }有了这个类就好办了
    var c1 = new interface1Adapter(
        x => { Console.WriteLine("interface2 run"); },
        x => { Console.WriteLine("bla."); return 0; });
      

  6.   

    顺便说下,表面上看,C#不如Java方便,但是实际上,恰恰相反,因为C#有委托,而Java没有,Java必须使用接口来模拟委托,所以大量需要定义接口的实现类,因此匿名实现接口才那么需要,而C#有了委托,根本不需要定义那么多接口,而委托更简单了。
      

  7.   

    用C#写程序,就应该习惯C#的思维方式,而不是将别的语言的思维方式强加给C#,虽然你在C#也可以模拟别的语言的特性,但是或多或少不如原生的C#语法简洁优雅。所谓“语言不重要,重要的思想”是错误的,一种语言有一种思想。
      

  8.   

    同意,C#比JAVA出现的晚,自然有很多改进的地方,你还用Java的思路去学C#,就落后了。我反过来学JAVA,各种不适应,它的语法太繁琐了。
      

  9.   

    十分感谢各位,看了devmiao的回答,算是豁然开朗了.结贴了.