gpt4 book ai didi

c# - C# 的访问修饰符在 Java 和 Scala 中的等价物是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:10 24 4
gpt4 key购买 nike

我以前使用 C#,现在我花很多时间使用 Scala 和 Java。这可能会造成混淆,因为这三种语言对其访问修饰符使用相似的名称,但并不总是表示相同的意思。

C# 的访问修饰符在 Java 和 Scala 中的等价物是什么?

最佳答案

以下是 Java 和 Scala 中与 C# 访问修饰符最接近的等效项。 在内部(在同一个程序集中可访问)的情况下,没有完全等同的东西。在 Java 中,您可以限制对同一个包的可访问性,但包更直接地等同于 C# 的命名空间,而不是 C# 的命名空间。组件。

(下表中的“无修饰符”被解释为适用于类成员。也就是说,在 C# 中,没有修饰符的类成员是私有(private)的。这不适用于默认为内部的顶级类型。)

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| C# | Java | Scala | Meaning |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| no modifier | private (1) | private | accessible only within the class where it is defined |
| private | | | |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| protected | -- | protected | accessible within the class and within derived classes (2) |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| internal | no modifier | private[package_name] | accessible within the same assembly (C#) or within the same package (Java / Scala) (3) |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| protected internal | protected | protected[package_name] | accessible within derived classes (2) and anywhere in the same assembly (C#) or package (Java / Scala) (3) |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| public | public | no modifier | accessible anywhere |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(1) 在 Java 中,内部类的私有(private)成员对外部类可见,但在 C# 或 Scala 中则不然。在 Scala 中,您可以使用 private[X],其中 X 是获取 Java 行为的外部类。

(2) 在 C# 和 Scala 中,如果 protected 成员是该类或进一步派生类的实例的成员,则该成员在该类中可见,但如果它是派生类较少的实例的成员则不可见. (在 Java 中也是如此,除了由于在同一个包中而可以访问的地方。)

示例(在 C# 中):

class Base
{
protected void Foo() {}

void Test()
{
Foo(); // legal
this.Foo(); // legal

new Base().Foo(); // legal
new Derived().Foo(); // legal
new MoreDerived().Foo(); // legal
}
}

class Derived : Base
{
void Test1()
{
Foo(); // legal
this.Foo(); // legal

new Base().Foo(); // illegal !
new Derived().Foo(); // legal
new MoreDerived().Foo(); // legal
}
}

class MoreDerived : Derived
{
void Test2()
{
Foo(); // legal
this.Foo(); // legal

new Base().Foo(); // illegal !
new Derived().Foo(); // illegal !
new MoreDerived().Foo(); // legal
}
}

(3) 在 Scala 中,您可以通过指定最内层包来获取 Java 行为,但您也可以指定任何封闭包。

关于c# - C# 的访问修饰符在 Java 和 Scala 中的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22968085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com