2009-01-15 121 views
13

C Sharp中「friend」關鍵字的等效含義是什麼?C Sharp中「friend」關鍵字的等效含義是什麼?

如何使用'internal'關鍵字?

我讀過'internal'關鍵字是C#中'friend'的替代品。

我在我的C#項目中使用了一個DLL,我有源代碼,但我不想修改現有的代碼。我繼承了這個類,我可以用我想要的方式使用我的繼承類。問題是父類中的大部分代碼都有受保護的方法。以某種方式使用朋友可以訪問或調用這些受保護的方法嗎?

+5

請澄清這個問題,因爲VB和C都有好友關鍵字。 C#中的C關鍵字沒有相同之處 – 2009-01-15 03:17:14

回答

27
  1. 可以使用關鍵字訪問修飾符internal聲明一個類型或類型成員只在同一組件代碼訪問。

  2. 您可以使用System.Rutime.CompilerServices中定義的InternalsVisibleToAttribute類將類型聲明爲僅在相同程序集或指定程序集中的代碼可訪問。

爲你使用任何其他access modifierprivate您使用第一個。即:

internal class MyClass { 
    ... 
} 

你使用第二如下:

[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")] 
internal class MyVisibleClass { 
    ... 
} 

這兩個可以正確地被認爲是friend在C#中的等價物。

方法protected已經可用於派生類。

5

1)Internal是VB.NET '朋友' 的關鍵字的C#equivelant,因爲你已經猜到(而不是替代)

2)用法如下

internal void Function() {} 
internal Class Classname() {} 
internal int myInt; 
internal int MyProperty { get; set; } 

3 )它基本上是一個訪問修飾符,它規定標記爲內部的類/函數/可擴展/屬性的可訪問性好像它被彙編到其中的大會是公共的,並且對於任何其他程序集是私有的

1

內部是相等的很多朋友。受保護的方法只能在同一個類或繼承者中使用。如果您試圖從繼承者公開受保護的方法,則可以將它們包裝在公共方法中。

1

您的子類將能夠訪問您繼承的類的受保護成員。

您是否希望將這些受保護的成員授予其他課程?

24

否,「內部」是不一樣的「朋友」(至少C++「朋友」)

朋友指定這個類是僅由一個可訪問的,特定類。
internal指定該類可由程序集中的ANY類訪問。

+0

這不等同,但它*是一組類在一起工作而不暴露於世界其他地方的機制。它還鼓勵較小的模塊,並減少類之間的「意大利麪條」關係。 – 2017-10-10 17:26:41

相關問題