首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在内部/本地/匿名类方面,Java和C#之间的根本区别是什么?

在内部/本地/匿名类方面,Java和C#之间的根本区别主要体现在以下几个方面:

  1. 匿名类的实现方式:

Java中的匿名类可以实现为内部类或本地类。内部类是在另一个类的内部定义的类,而本地类是在一个方法或代码块中定义的类。匿名类可以访问外部类的成员变量和方法,但本地类只能访问局部变量(不是方法参数)和成员变量。

C#中的匿名类可以实现为匿名类型或者表达式。匿名类型是在声明时定义的类,它可以包含属性、方法和构造函数。匿名类型可以访问外部作用域的局部变量和成员变量,但不能访问方法参数。匿名类型的实例只能用于隐式类型的局部变量或字段。

  1. 语法差异:

Java中的匿名类使用关键字new和类名后的一对大括号{}来定义,例如:

代码语言:java
复制
Runnable r = new Runnable() {
    public void run() {
        System.out.println("Hello, world!");
    }
};

C#中的匿名类使用new关键字和一组花括号{}来定义,例如:

代码语言:csharp
复制
Action a = delegate() {
    Console.WriteLine("Hello, world!");
};
  1. 类型推断:

Java中的匿名类没有类型,因此需要显式地声明类型。例如:

代码语言:java
复制
List<Runnable> runnables = new ArrayList<>();
runnables.add(new Runnable() {
    public void run() {
        System.out.println("Hello, world!");
    }
});

C#中的匿名类可以通过类型推断来隐式地定义类型,例如:

代码语言:csharp
复制
List<Action> actions = new List<Action>();
actions.Add(delegate() {
    Console.WriteLine("Hello, world!");
});
  1. 匿名方法:

Java中的匿名类可以实现为匿名方法,即只包含一个方法的类。匿名方法可以省略方法的返回类型和方法名,例如:

代码语言:java
复制
Runnable r = new Runnable() {
    public void run() {
        System.out.println("Hello, world!");
    }
};

C#中的匿名方法可以实现为匿名函数,即只包含一个方法的类。匿名函数可以省略方法的返回类型和方法名,例如:

代码语言:csharp
复制
Action a = delegate() {
    Console.WriteLine("Hello, world!");
};

总之,Java和C#在匿名类的实现方式和语法上有一些差异,但它们都可以实现类似的功能。Java中的匿名类更加灵活,可以实现为内部类或本地类,而C#中的匿名类更加简洁,可以使用类型推断和匿名函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

转:Java中ScannerBufferReader之间区别

原文地址:https://blog.csdn.net/u014717036/article/details/52227782 java.util.Scanner是一个简单文本扫描,它可以解析基本数据类型字符串...它本质上是使用正则表达式去读取不同数据类型。 Java.io.BufferedReader为了能够高效读取字符序列,从字符输入流字符缓冲区读取文本。...如果我们在nextXXX()方法nextLine()方法之间使用超过一个以上nextLine()方法,这个问题将不会出现了;因为nextLine()把换行符消耗了。可以参考这个程序正确写法。...这个问题C/C++中scanf()方法紧跟gets()方法问题一样。 其他不同点: BufferedReader是支持同步,而Scanner不支持。...原文链接:Difference between Scanner and BufferReader Class in Java 翻译:crane-yuan [ 转载请保留原文出处、译者译文链接。]

44120
  • Java五个最常用集合之间区别联系

    :HashSet,TreeSet Queue结构集合:Queue接口 HashMapHashtable区别: HashMapHashtable都是java集合,都可以用来存放java对象...,这是他们相同点 以下是他们区别: 1.历史原因: Hashtable是基于陈旧Dictionary,HashMap是java 1.2引进Map接口一个现实。...java集合,都是用来存放java对象,这是他们相同点, 区别: 1.同步性: Vector是同步,这个一些方法保证了Vector中对象线程安全,而ArrayList则是异步,因此ArrayList...最后一个节点后指针指向第一个节点前指针,形成一个循环。 双向循环链表查询效率低但是增删效率高。 ArrayListLinkedList在用法上没有区别,但是在功能上还是有区别的。...面试经验(知识点): java.util.stack(stack即为堆栈)为Vector。可是stack是最不应该为Vector

    34000

    C#秒杀Java五个不可替代特性,完美的编程语言并不存在

    如果我们可以同时拥有 C# Java 世界最好特性,那会是什么样呢? 完美的编程语言并不存在,我希望我们可以在这一点上达成一致。...一个结构体一个之间最大区别在于结构是值类型,而是引用类型。 相比于创建,编写结构体最重要好处是在构造一个值类型时比在构造引用类型时更容易确保值语义。...工具生态系统 Java C# 之间存在大量不同之外,当然,其中一些源于 Java .NET 框架不同。...最后思考 在快结束时候,我们这里提到大部分功能都在代码长度简洁程度方面C# 开发者有所帮助,这些代码不能在 Java 中编写。...再次说明,我们不想卷入没完没了关于哪种言更好争论,我们只是在这里指出两种语言之间一些区别。我们是否遗漏了某些你希望 Java 拥有的特性?请在评论中告诉我们!

    3K100

    c#面试题抽象接口区别-Java软件工程师面试题及答案

    而且可以实现多个接口,接口可以继承多个接口,但一个不能继承多个。   6.接口抽象区别?   ...抽象定义了是什么,接口定义了可以做什么,一个只能继承一个抽象,但一个可以实现多个接口。比如动物是猫抽象,猫继承了动物抽象就不能继承植物抽象,决定了猫只能是动物了。...接口吃接口睡,猫都可以实现,因为猫既会吃也会睡,实现了接口决定了猫具有相应功能。   7.java里有哪些循环?   ...9.使用jdbc连接数据库步骤?   (1)加载JDBC驱动程序,通过java.lang.Class静态方法()实现,提供JDBC连接URL,用户名,密码。   ...(3)创建一个声明,要执行SQL语句必须获得java.sql.实例,其中执行静态sql使用实例c#面试题抽象接口区别,执行动态sql语句,使用实例,执行存储过程c#面试题抽象接口区别,使用实例

    46420

    Java内部类详解

    静态嵌套使用很少,最重要是非静态嵌套,也即是被称作为内部类(inner)。内部类是JAVA语言主要附加部分。...内部类中属性方法即使是外部类也不能直接访问,相反内部类可以直接访问外部类属性方法,即使private利于回调函数编写, Java四种内部类 成员内部类 局部内部类 匿名内部类 静态内部类...静态嵌套 关键字static可以修饰成员变量、方法、代码块,其实它还可以修饰内部类,使用static修饰内部类我们称之为静态嵌套。静态嵌套与非静态嵌套之间存在一个最大区别。...以上就是所有的java内部类各种模式简单例子 大家要注意一点,java中只能在内部类中创建静态成员,也就是静态嵌套,也有很多人疑惑为什么 java 静态嵌套部类中可以有非静态成员,还有为什么可以...(特别是 c# 程序员),所以C#程序员转过来一定要注意,我就是其中一位!!!

    82321

    【深入浅出C#】章节 1: C#入门介绍:C#历史发展

    C#重要性广泛应用主要体现在以下几个方面: .NET平台主要语言:C#是.NET平台主要编程语言之一。...2.2 C#Java关系 C#Java是两种相似而又有一些区别的编程语言。它们都是面向对象编程语言,具有、继承、多态等共同概念特性。...C#Java之间存在一些相似之处: 语法相似:C#Java语法非常相似,尤其是在基本控制流语句、对象定义、方法声明等方面。这使得从一种语言转换到另一种语言相对容易。...然而,C#Java之间也存在一些区别: 平台依赖性:Java可以在Java虚拟机(JVM)上运行,而C#需要依赖于.NET Framework或.NET Core。...索引初始值设定项 C# 7.0: 异步主方法(Async Main) 元组扩展命名成员 Pattern Matching(模式匹配) Out变量声明 本地函数 Throw表达式 Ref locals

    1K21

    C# 发展历史及版本新功能介绍

    C# 1.0 版 回想起来,C# 1.0 版非常像 Java。 在 ECMA 制定设计目标中,它旨在成为一种“简单、现代、面向对象常规用途语言”。...当时,它 Java 类似,说明已经实现了上述早期设计目标。 不过如果现在回顾 C# 1.0,你会觉得有点晕。 它没有我们习以为常内置异步功能以泛型为中心巧妙功能。 其实它完全不具备泛型。...这是该语言最重要一部分,显著提升了语言可读性以及人们推出代码能力。 不过 C# 依然在追赶 Java 道路上。 当时 Java 已发布包含泛型迭代器版本。...泛型类型参数支持协变逆变,可在分配使用泛型类型方面提供更大灵活性。 在引用类型系统时,协变、逆变不变性具有如下定义。...语言设计者除了推出新功能外,也会在这方面付出时间精力。 语言功能与库类型之间关系 C# 语言定义要求标准库拥有某些类型以及这些类型特定可访问成员。

    4.2K20

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    2 由于Java规定静态内部类不能用使用外在非静态属性方法,所以只是为了方便管理结构而定义。于是我们在创建静态内部类时候,不需要外部类对象引用。...让他成为主实例一部分 然后又想在内部类声明实例无关静态东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大优点:可以自由使用外部类所有变量方法...当然,非静态成员代码块每次实例化时也会执行。 总结一下Java代码加载顺序,万变不离其宗。...//因为只有在方法调用时才能进行加载初始化。 } } } 匿名内部类 简单地说:匿名内部类就是没有名字内部类,并且,匿名内部类是局部内部类一种特殊形式。...毕竟站在程序角度来看这两个根本就是同一个,如果内部类该变了,而外部方法形参却没有改变这是难以理解不可接受,所以为了保持参数一致性,就规定使用final来避免形参不改变。

    1.2K10

    夯实Java基础系列18:深入理解Java内部类及其实现原理

    2 由于Java规定静态内部类不能用使用外在非静态属性方法,所以只是为了方便管理结构而定义。于是我们在创建静态内部类时候,不需要外部类对象引用。...让他成为主实例一部分 然后又想在内部类声明实例无关静态东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大优点:可以自由使用外部类所有变量方法...当然,非静态成员代码块每次实例化时也会执行。 总结一下Java代码加载顺序,万变不离其宗。...//因为只有在方法调用时才能进行加载初始化。 } } } 匿名内部类 简单地说:匿名内部类就是没有名字内部类,并且,匿名内部类是局部内部类一种特殊形式。...毕竟站在程序角度来看这两个根本就是同一个,如果内部类该变了,而外部方法形参却没有改变这是难以理解不可接受,所以为了保持参数一致性,就规定使用final来避免形参不改变。

    41810

    Java中如何理解面向接口编程,荐读篇

    实际上,检疫员饲养员所关注动物方面是不同(虽然他们都不在乎是什么动物),饲养员只在乎动物“吃”这个方面,而检疫员只在乎动物“检疫”这个方面。 (7)进一步分析问题 有人会问,这个有问题吗?..."I have ..."之间区别。为了区分两种,在软件设计行业中就出现了与接口不同概念,并且在“后起”程序设计语言javaC#中,也对着两者做显示区分(从语法上进行定义)。...而java/C#与C++区别在于,他们严格区别开了前面我们介绍接口区别。...接口由于完全从分离出来一种特殊,它负责对继承它方法进行规范,正是因为接口这个特殊作用,使得,它不会语义上不需要对方法实现,这一点,在javaC#中,被钉死了。...自然不会,我们用“吃”做为他面向东西,因为不管是C++,还是C#/java.他们都保证了接口在这方面的特性,所以,使用“吃”作为面向东西来实现我们要实现多态性是语法可行

    1.1K10

    Java基础8:深入理解内部类

    本文主要介绍了Java内部类基本原理,使用方法各种细节。 有关内部类实现回调,事件驱动委托机制文章将在后面发布。...2 由于Java规定静态内部类不能用使用外在非静态属性方法,所以只是为了方便管理结构而定义。于是我们在创建静态内部类时候,不需要外部类对象引用。...让他成为主实例一部分 然后又想在内部类声明实例无关静态东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大优点:可以自由使用外部类所有变量方法...当然,非静态成员代码块每次实例化时也会执行。 总结一下Java代码加载顺序,万变不离其宗。...毕竟站在程序角度来看这两个根本就是同一个,如果内部类该变了,而外部方法形参却没有改变这是难以理解不可接受,所以为了保持参数一致性,就规定使用final来避免形参不改变。

    1.5K00

    Java基本功】一文读懂Java内部类用法原理

    2 由于Java规定静态内部类不能用使用外在非静态属性方法,所以只是为了方便管理结构而定义。于是我们在创建静态内部类时候,不需要外部类对象引用。...让他成为主实例一部分 然后又想在内部类声明实例无关静态东西 你让JVM情何以堪啊 4 若想在内部类内声明静态字段 就必须将其内部类本身声明为静态 非静态内部类有一个很大优点:可以自由使用外部类所有变量方法...当然,非静态成员代码块每次实例化时也会执行。 总结一下Java代码加载顺序,万变不离其宗。...//因为只有在方法调用时才能进行加载初始化。 } } } 匿名内部类 简单地说:匿名内部类就是没有名字内部类,并且,匿名内部类是局部内部类一种特殊形式。...毕竟站在程序角度来看这两个根本就是同一个,如果内部类该变了,而外部方法形参却没有改变这是难以理解不可接受,所以为了保持参数一致性,就规定使用final来避免形参不改变。

    1.2K30

    C#:昨天,今天和明天: Anders Hejlsberg 座谈,第二部分

    Hejlsberg:从这方面来讲,语法在很大程度上影响了你如何思考问题,尽管这些语法上东西根本事情本身毫无关系。 Osborn: 是的。...Osborn: 那么,相对于其他语言而言C#泛型有什么不同呢? Hejlsberg: 哈哈,靠,很明显我更想让你说:就在C#Java之间比较吧。 Osborn:没错,我也是这个意思。...而且 Java 编译器把泛型化从代码中移除了,并注入了对象,有效对象替代了类型参数信息。也就是说呀,Java 在运行时根本没有泛型这一说。...这就有意思啦,一方面可以让泛型跑在一个未经修改 VM 虚拟机上,另一方面强加给你很多让然吃惊限制规则。...C#:昨天,今天和明天: Anders Hejlsberg 座谈,第三部分 第三部分讲:匿名方法 lambda 表达式LINQ 关系。

    86831

    C# 基础知识

    面向对象三个特性:继承‘封装多态 继承:就是子类实现父属性方法,并在此基础上进行相关扩展. 多态是建立在重写基础之上,是之间关系,是发生在不同之间,子类重写父方法。...多线程如何精确控制某个线程:做不到 6.数据库性能优化:年龄、性别、姓名 C#方法访问级别限制 访问修饰符有public、internal,缺省时为internal...延锋汽车内饰:魏工 1.线程与进程区别 2.python与c#线程区别 3.数据库优化方式有几种 3.接触过关系形数据库以外那些数据库? 4.多线程如何同步? 5.高斯滤波?...6.边缘提取方式有那些? 7.bs方面有没有做过? 8. 太赫兹是什么原理? 9.你在项目中承担什么角色?做了那些事 10.你项目用了什么设计模式? 11.架构有没有涉及,能自己设计出来吗?...mysqlsql什么区别? 7. 堆区别是什么

    51720

    .NET基础面试题整理

    GC是什么,简述一下GC工作方式? JIT:Just in time,C#或者是VB.NET代码首先被编译为IL存储在本地,当要运行这些代码时候,CLR对IL进行第二次编译转换成机器码运行。...,使用Using语句进行确定性终结 03 3.(class)结构(struct)区别是什么?...所以结构处理作为基类型对待小对象,而处理某个商业逻辑因为结构是值类型所以结构之间赋值可以创建新结构,而是引用类型,之间赋值只是复制引用 注:1.虽然结构与类型不一样,可是他们基类型都是对象...匿名方法是什么? 在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要特性,它们带来了什么优势?BCL中哪些这些特性有关?...Lambda表达式:是比匿名方法更加简洁一种匿名函数语法 委托事件没有可比性,因为委托是类型,事件是对象,下面说是委托对象(用委托方式实现事件)(标准event方式实现)事件区别

    1.6K21

    Java面向对象问题汇总

    2、接口抽象区别 2.1、接口抽象区别是什么 接口方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象可以有非抽象方法 接口中实例变量默认是...2.2、接口作用是什么 重要性:abstract class interface 是支持抽象定义两种机制。正是由于这两种机制存在,才赋予了Java强大面向对象能力。 简单、规范性。...2.3、抽象意义是什么 把一些具有相同属性方法组件进行抽象,这样更有利于代码程序维护。 当有一个具有相似的组件产生时,只需要实现该抽象就可以获得该抽象那些属性方法。...匿名内部类: 定义匿名内部类前提是,内部类必须要继承一个或者实现接口,格式为 new 父或者接口(){定义子类内容(如函数等)}。也就是说,匿名内部类最终提供给我们是一个匿名子类对象。...如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,通过final关键字可得到一个外部变量引用。通过final关键字也不会在内部类去做修改该变量值,保护了数据一致性。

    37430

    读书笔记 | 使用 | Effective Java 3

    public class Main{ // 静态非静态之前唯一区别是,静态成员声明中包含static public class MemberClass{} } 匿名匿名相当于在定义同时再新建这个实例...匿名中可以包含东西有:字段、方法、实例初始化代码、本地 匿名中不可以包含东西有: // 匿名示例 public class Test { public void test() {...非静态常见使用方法一般是在内部 Adapter (适配器)类似的功能,以 Set List 为例,内部通过非静态成员来实现它们迭代器 // Typical use of a nonstatic...MyIterator(); } private class MyIterator implements Iterator { ... } } 在语法上,静态成员非静态成员之间唯一区别是静态成员在其声明中具有...非静态成员实例其宿主实例之间关联是在创建成员实例时建立,并且之后不能被修改。通常情况下,通过在宿主实例方法中调用非静态成员构造方法来自动建立关联。

    38120

    编程思想 之「接口、内部类」

    Java 语言体系中,接口是两种常见定义对象形式,内部类则是一种特殊形式。接口内部类为我们提供了一种将抽象定义与具体实现相分离更加结构化方法。...: [Nofinal] 此外,在匿名内部类中不可能有命名构造器,因为它根本就没有名字!...如果不需要内部类对象与外围对象之间有联系,那么可以将内部类声明为static类型,这就是我们所说嵌套。...普通内部类嵌套还有一些区别,例如: 在普通内部类中,我们可以通过一个特殊this关键字可以引用到外围对象,但是嵌套不可以; 普通内部类字段与方法,只能放在外部层次上,所以普通内部类不能有...我们也可以在代码块里面建立内部类,比较典型是在方法里面建立内部类,称之为局部内部类。局部内部类匿名内部类具有相同行为能力,两者唯一区别或许就是局部内部类比匿名内部类多个名字啦!

    1.2K110

    理解委托类型

    (并不是所有的引用类型都是class) 是一种定义方法签名类型,可以与具有兼容签名任何方法关联。 与委托签名(由返回类型参数组成)匹配任何可访问或结构中任何方法都可以分配给该委托。...可以看到里面有1个public 方法,跟3个好像跟方法类似的东西(因为这2个框框组成图标是什么含义我确实也不清楚) 可见委托里面也是可以有方法(不过这些方法不是我们自己创建,其实我们定义一个委托类型数据体时候就是一局话...既然事件就是委托,使用方法也是完全一样,也不重复写了(唯一区别是“仅可从声明它们或结构(发行者)中调用”) 值得注意是即时被event修饰,如果把当前委托实例传给其他,在其他中也是可以触发委托...那必须先搞清楚这到底是在问什么 是要问event 跟 delegate  还是 Delegate  区别 这些开头就有解释,根本不是一个类型东西,绝对不一样。...IL终究不是C#,不会影响结论:在C#委托 不是 委托一般应用 跨跨线程消息通知(委托执行是定义委托或线程,委托赋值是其他或线程,在没有invoke情况下调用线程是执行线程,这种问题一般加事件修饰

    71600
    领券