在内部/本地/匿名类方面,Java和C#之间的根本区别主要体现在以下几个方面:
Java中的匿名类可以实现为内部类或本地类。内部类是在另一个类的内部定义的类,而本地类是在一个方法或代码块中定义的类。匿名类可以访问外部类的成员变量和方法,但本地类只能访问局部变量(不是方法参数)和成员变量。
C#中的匿名类可以实现为匿名类型或者表达式。匿名类型是在声明时定义的类,它可以包含属性、方法和构造函数。匿名类型可以访问外部作用域的局部变量和成员变量,但不能访问方法参数。匿名类型的实例只能用于隐式类型的局部变量或字段。
Java中的匿名类使用关键字new
和类名后的一对大括号{}
来定义,例如:
Runnable r = new Runnable() {
public void run() {
System.out.println("Hello, world!");
}
};
C#中的匿名类使用new
关键字和一组花括号{}
来定义,例如:
Action a = delegate() {
Console.WriteLine("Hello, world!");
};
Java中的匿名类没有类型,因此需要显式地声明类型。例如:
List<Runnable> runnables = new ArrayList<>();
runnables.add(new Runnable() {
public void run() {
System.out.println("Hello, world!");
}
});
C#中的匿名类可以通过类型推断来隐式地定义类型,例如:
List<Action> actions = new List<Action>();
actions.Add(delegate() {
Console.WriteLine("Hello, world!");
});
Java中的匿名类可以实现为匿名方法,即只包含一个方法的类。匿名方法可以省略方法的返回类型和方法名,例如:
Runnable r = new Runnable() {
public void run() {
System.out.println("Hello, world!");
}
};
C#中的匿名方法可以实现为匿名函数,即只包含一个方法的类。匿名函数可以省略方法的返回类型和方法名,例如:
Action a = delegate() {
Console.WriteLine("Hello, world!");
};
总之,Java和C#在匿名类的实现方式和语法上有一些差异,但它们都可以实现类似的功能。Java中的匿名类更加灵活,可以实现为内部类或本地类,而C#中的匿名类更加简洁,可以使用类型推断和匿名函数。
领取专属 10元无门槛券
手把手带您无忧上云