gpt4 book ai didi

c# - 了解 C# 中类的访问说明符

转载 作者:太空狗 更新时间:2023-10-30 00:10:06 29 4
gpt4 key购买 nike

首先,让我先说我理解访问说明符,只是看不到在类中使用它们的意义。在方法上限制它们的范围是有意义的,但在类上,你为什么想要一个私有(private)类,类的目的不是能够重用它们吗?

在 C# 中声明类时,访问说明符的用途是什么?你会在什么时候使用它们?

谢谢

最佳答案

好吧,假设您希望一个类只能在她自己的程序集中访问:

internal class Test

假设您有两个类,一个在另一个里面(嵌套类):

protected internal class TestA
{
private TestB _testB;

private class TestB
{
}

public TestA()
{
_testB = new TestB();
}
}

TestB 类只能在 TestA 或她自己的方法/属性/构造函数内部访问。

这同样适用于 protected 修饰符。

//注意

如果您不指定访问修饰符,默认情况下它将是 private,因此在我的示例中有以下行:

private TestB _testB;

等于

TestB _testB;

这同样适用于类。

特殊修饰符

然后,protected internal 连接了两个修饰符,因此您只能在同一程序集中访问该类 OR 来自该类派生的类,甚至如果它不在同一个程序集中。示例:

程序集 1:

public class TestA : TestB
{
public TestB GetBase()
{
return (TestB)this;
}

public int GetA1()
{
return this.a1;
}
}
protected internal class TestB
{
public int a1 = 0;
}

程序

TestA _testA = new TestA(); // OK
TestB _testB = new TestB(); // ERROR

int debugA = new TestA().a1 // ERROR
int debugB = new TestA().GetA1(); // OK

TestB testB_ = new TestA().GetBase(); // ERROR

来源

Link (Access Modifiers)

The type or member can be accessed by any code in the same assembly, but not from another assembly.

The type or member can be accessed only by code in the same class or struct.

The type or member can be accessed only by code in the same class or struct, or in a class that is derived from that class.

The type or member can be accessed by any other code in the same assembly or another assembly that references it.

关于c# - 了解 C# 中类的访问说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774177/

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