java代码转换为C#代码的问题.
学习C#中.希望大家给点信心.
java中可以有以下实例化代码:
class1 c1 = new class1() {
public void function1() {
System.Console.WriteLine("blabla.");
}
public String toString() { return "bla"; }
}
这在C#中应该如何简洁实现?
另外,关于线程操作的Runnable接口\synchronized\wait\notify在C#中怎么实现?
[最优解释]
那就没办法了。不过可以这样:
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; });
[其他解释]
C#不支持完整功能的匿名类,不过支持委托,可以这么写:
var c1 = new {
function1 = new Action(() => {
Console.WriteLine("blabla.");
}),
toString() = new Func<string>(x =>"bla")
};
c1.function1();
string s = c1.toString();
[其他解释]
你指的简洁实现时 代码量敲得最少么?
[其他解释]
var c1 = new {
function1 = new Action(() => {
Console.WriteLine("blabla.");
}),
toString = new Func<string>(x =>"bla")
};
c1.function1();
string s = c1.toString();
[其他解释]
嗯.差不多这个意思.
[其他解释]
十分感谢,第二个问题请问您有何高见?
[其他解释]
C#有委托,不需要什么Runable接口。
线程同步,C#有Monitor lock Mutex Thread.Join Event 等等。
[其他解释]
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;
}
} );
}
如果是这个呢?
[其他解释]
顺便说下,表面上看,C#不如Java方便,但是实际上,恰恰相反,因为C#有委托,而Java没有,Java必须使用接口来模拟委托,所以大量需要定义接口的实现类,因此匿名实现接口才那么需要,而C#有了委托,根本不需要定义那么多接口,而委托更简单了。
[其他解释]
用C#写程序,就应该习惯C#的思维方式,而不是将别的语言的思维方式强加给C#,虽然你在C#也可以模拟别的语言的特性,但是或多或少不如原生的C#语法简洁优雅。所谓“语言不重要,重要的思想”是错误的,一种语言有一种思想。
[其他解释]
同意,C#比JAVA出现的晚,自然有很多改进的地方,你还用Java的思路去学C#,就落后了。我反过来学JAVA,各种不适应,它的语法太繁琐了。
[其他解释]
十分感谢各位,看了devmiao的回答,算是豁然开朗了.结贴了.