对于这个问题:What is the C# equivalent of friend?,我个人已回答“内部”,就像Ja在答案中所做的那样!然而,Jon Skeet说在C#中没有直接等价的VB Friend。如果Jon Skeet这么说的话,我就不会这样说了! ; P
我想知道关键字internal(C#)在各自的定义是什么时不能等同于Friend(VBNET):
声明语句中的Friend (Visual Basic)关键字指定可以从同一个程序集中访问元素,但不能从程序集外部访问。 [...]
Internal:访问仅限于当前程序集。
据我了解,这些定义对我来说意义相同。
然后,当我在VB.NET中编码时,我使用 Friend 关键字来指定只能在声明它的程序集中访问类或属性。在C#中,我使用 internal 关键字来指定相同的内容。
从这个角度来看,我做错了什么?
我没有得到什么改进?
有人可以解释一下朋友和内心是如何或者不是直接对等的?
提前感谢您的任何答案!
答案 0 :(得分:24)
我说过没有直接等同于 C ++ “朋友”的概念。这与VB.NET Friend
概念不同,后者确实等同于C#中的internal
。
上下文很重要 - 不要认为同一个词在所有语言中都意味着完全相同的东西......“静态”是一个典型的例子:)
答案 1 :(得分:4)
Jon的(原始)答案清楚地表明他指的是C / C ++ friend
关键字,它授予对另一个类的私人访问权限。 C#中没有直接的等价物,但有一种方法可以将internal
扩展到另一个程序集,主要用于测试。
据我了解,VB.Net Friend
与C#internal
相同。
(就像Jon在这里添加了答案一样,我写了上面的内容。)
答案 2 :(得分:3)
比较.NET语言时,VB的friend
等同于C#的internal
。意思是,任何标记为此类的内容只能在同一项目/程序集中访问。它可以与protected
结合使用,以便更好地控制可见性。
InternalsVisibleTo
属性可用于测试目的;尽管有这个名字,但它和C#一样适用于VB。应该注意的是,在.NET 4之前,VB不支持使用InternalsVisibleTo
。
答案 3 :(得分:2)
托管代码中的C ++ friend关键字大致相当。虽然它适用于程序集级别,但不适用于类级别。您可以使用[InternalsVisibleTo]
attribute。