gpt4 book ai didi

c# - C#有没有相当于Delphi的private修饰符

转载 作者:太空狗 更新时间:2023-10-29 20:10:23 24 4
gpt4 key购买 nike

在 Delphi 中,private 修饰符可能是唯一的:

Contoso = class
private
procedure DoStuff();
end;

你会认为 C# 等价于:

class Contoso
{
private void DoStuff()
{
}
}

但在 Delphi 中,private 关键字更像是 unit friend。换句话说,同一代码文件中的其他类 可以访问私有(private)成员。将 Delphi 转码为 C#,这将等效于以下代码:

public class Contoso
{
private void DoStuff()
{
}
}

internal class Fabrikam
{
Contoso _contoso;

//constructor
Fabrikam()
{
_contoso = new Contoso();
_contoso.DoStuff(); //i can call a private method of another class
}
}

即使 DoStuff 方法是 Contoso 私有(private)的,同一文件中的其他类也可以调用该方法。

我不想让方法成为内部:

class Contoso
{
internal void DoStuff();
}

因为程序集中的其他代码可以看到或调用 DoStuff 方法;我不想要。


C# 是否支持某种unit friendunit internal 访问修饰符?

最佳答案

不完全是。

在 C# 中,您可以将成员声明为 internal ,这会为同一程序集中的类(代码)提供对该成员的访问权限。这与 Delphi 的 Unit 访问规则的用法大致相同。

范围更广,但您拥有更多控制权。

您明确表示您不想要这个,但请考虑用例。在 Delphi 中,您不愿意将访问权限授予所有 私有(private)成员。而且您无法将每个类(class)放在自己的单元中。

在 .NET 中,一个程序集是 1 个项目,在一个程序集中管理不需要的访问很容易。与世界其他地方建立一道屏障更为重要。

您不能限制文件边界,因为文件在 C# 中几乎没有意义。 IL 中不存在文件边界,并且这样的规则一方面可能会与部分类发生冲突。

关于c# - C#有没有相当于Delphi的private修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262031/

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