C#内部VS VBNET好友

Wil*_*ler 18 .net language-features keyword c#-to-vb.net vb.net-to-c#

对于这个问题:什么是C#相当于朋友?,我个人已回答"内部",就像Ja在答案中所做的那样!然而,Jon Skeet说在C#中没有直接等价的VB Friend.如果Jon Skeet这么说的话,我就不会这样说了!,P

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

朋友VBNET

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

内部C#

内部:访问仅限于当前程序集.

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

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

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

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

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

提前感谢您的任何答案!

Jon*_*eet 27

我已经说过,没有直接相当于C++ "朋友"的概念.这与VB.NET Friend概念不同,后者确实等同internal于C#.

上下文很重要 - 不要认为同一个词在所有语言中都意味着完全相同的东西......"静态"是一个经典的例子:)

  • @Will:抱歉,你说得对 - VB 中的 Friend 确实等同于 C# 中的 internal。那个问题是不正确的,因为问题不是关于 VB 的。不过我会在这里编辑我的答案 :) 作为记录,InternalsVisibleTo 是关于一个程序集被允许访问另一个程序集的内部成员。 (3认同)

Ste*_*dit 5

乔恩(原始)的回答清楚地表明,他指的是C / C ++ friend关键字,该关键字授予对另一个类的私有访问权。C#中没有直接等效的方法,但是有一种方法可以扩展internal到另一个程序集,主要用于测试。

据我了解,VB.Net Friend与C#相同internal

(正如乔恩在此处添加答案一样,我写了以上内容。)


Gra*_*lin 5

在比较 .NET 语言时,VBfriend等同于 C# 的internal. 意思是,任何标记为此类的内容只能从同一项目/程序集中访问。它可以结合使用protected以更好地控制可见性。

InternalsVisibleTo属性可用于测试目的;尽管名称如此,但它适用于 VB 和适用于 C# 一样多。需要注意的是,VBInternalsVisibleTo直到 .NET 4 才支持使用。