C#是否具有Delphi';的私有修饰符

本文关键字:是否 Delphi | 更新日期: 2023-09-27 18:28:00

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

Contoso = class
private
   procedure DoStuff();
end;

你会认为有相当于:的C#

class Contoso
{
   private void DoStuff()
   {
   }
}

但在Delphi中,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
   }
}

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

我不想让方法internal:

class Contoso
{
   internal void DoStuff();
}

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


C#是否支持某种单元友元单位内部访问修饰符?

C#是否具有Delphi';的私有修饰符

不完全是。

在C#中,您可以将一个成员声明为internal,这使同一程序集中的类(代码)可以访问该成员。这与Delphi的单元访问规则的用法大致相同。

范围更广,但你有更多的控制权。

你明确表示你不想要这个,但要考虑一下用例。在Delphi中,您不愿意访问所有私人成员。并且你被阻止将每个类放在自己的单元中。

在.NET中,程序集是一个项目,在一个程序集中管理不需要的访问很容易。为世界其他地区竖起围栏要重要得多。

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

在C#中定义类的文件并没有什么意义——你可以在一个文件中有多个不同名称空间的类,也可以在多个文件中拆分类(分部类)。

在C#中没有您在delphi中拥有的相同级别的访问权限——在C#中,您可以通过protected访问继承的类,通过内部或同一类内访问同一程序集中的类,并通过private访问嵌套的类。

也许你正在寻找的是一个嵌套类——没有一个具体的例子很难判断。