C#内部VS VBNET好友

时间:2010-05-07 18:11:13

标签: .net language-features keyword c#-to-vb.net vb.net-to-c#

对于这个问题:What is the C# equivalent of friend?,我个人已回答“内部”,就像Ja在答案中所做的那样!然而,Jon Skeet说在C#中没有直接等价的VB Friend。如果Jon Skeet这么说的话,我就不会这样说了! ; P

我想知道关键字internal(C#)在各自的定义是什么时不能等同于Friend(VBNET):

Friend VBNET

  

声明语句中的Friend (Visual Basic)关键字指定可以从同一个程序集中访问元素,但不能从程序集外部访问。 [...]

internal C#

  

Internal:访问仅限于当前程序集。

据我了解,这些定义对我来说意义相同。

然后,当我在VB.NET中编码时,我使用 Friend 关键字来指定只能在声明它的程序集中访问类或属性。在C#中,我使用 internal 关键字来指定相同的内容。

  1. 从这个角度来看,我做错了什么?

  2. 我没有得到什么改进?

  3. 有人可以解释一下朋友和内心是如何或者不是直接对等的?

  4. 提前感谢您的任何答案!

4 个答案:

答案 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