簡體   English   中英

C#是否具有相當於Delphi的私有修飾符

[英]Does C# have the equivalent of Delphi's private modifier

在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
   }
}

盡管DoStuff方法對Contoso是私有的,但同一文件中的其他類可以調用該方法。

我不想要的是使方法internal

class Contoso
{
   internal void DoStuff();
}

因為然后程序集中的其他代碼可以看到或調用DoStuff方法; 這是我不想要的。


C#是否支持某種單位朋友單位內部訪問修飾符?

不完全是。

在C#中,您可以將一個成員聲明為internal ,它在同一個程序集中為該成員提供類(代碼)。 這與Delphi的單元訪問規則或多或少具有相同的用法。

范圍更廣,但您有更多的控制權。

您明確聲明您不希望這樣,但請考慮用例。 在Delphi中,您不情願地允許所有私人成員訪問。 而且你被阻止將每個班級都放在自己的單位中。

在.NET中,程序集是一個項目,並且在一個程序集中管理不需要的訪問很容易。 為世界其他地區設置圍欄更為重要。

您不能限制文件邊界,因為文件在C#中幾乎沒有意義。 IL中不存在文件邊界,這樣的規則可能與部分類沖突。

定義類的文件在C#中實際上並不是那么多 - 您可以在一個文件中有多個類,這些類位於不同的命名空間中,您可以將類拆分為多個文件(部分類)。

在C#中沒有與delphi中相同的訪問級別 - 在C#中,您可以通過protected訪問繼承的類,通過內部或同一類在同一程序集中訪問類,通過private訪問嵌套類。

也許您正在尋找的是嵌套類 - 如果沒有具體的例子,很難說清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM