【问题标题】:C# internal VS VBNET FriendC# 内部 VS VBNET 朋友
【发布时间】:2010-05-07 18:11:12
【问题描述】:

对于这个 SO 问题: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. 有人可以解释一下 Friend 和 internal 如何或在什么方面不是直接等价的?

提前感谢您的任何回答!

【问题讨论】:

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


    【解决方案1】:

    我已经说过 C++“朋友”的概念没有直接的等价物。这和 VB.NET 的Friend 概念不一样,它确实相当于 C# 中的internal

    上下文很重要——不要假设同一个词在所有语言中都意味着完全相同的东西......“静态”是一个典型的例子:)

    【讨论】:

    • 我想我被“朋友”关键字弄糊涂了。特别是在阅读了 Ja 的“内部”答案之后,并被说这是不正确的。所以,在谈论 .NET 时,两者都是等价的,对吧?这个 InternalsVisibleToAttribute 是什么?
    • @Will:对不起,你是对的——VB 中的 Friend 确实相当于 C# 中的 internal。那个问题是不正确的,因为问题不是关于 VB 的。不过会在这里编辑我的答案 :) 作为记录,InternalsVisibleTo 是关于一个程序集被允许访问另一个程序集的内部成员。
    • +1 感谢 Jon 的回答,以及其他发表评论的人。
    【解决方案2】:

    比较 .NET 语言时,VB 的 friend 等同于 C# 的 internal。意思是,任何标记为这样的东西只能从同一个项目/程序集中访问。它可以与protected 结合使用,以更好地控制可见性。

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

    【讨论】:

    • +1 提到 VBNET 直到 .NET 4.0 才支持 InternalsVisibleTo。感谢您的回答! =)
    • -1 用于需要 .NET 4 的 VB 评论:我有一个 VS2k8 VB 项目和 VB 测试项目,前者带有 InternalsVisibleTo 链接到后者,没有它就无法工作。 (有单独的不相关的 Publicize 功能创建 _Accessor 类型,这使得这有点多余,但它仍然有效。) MSDN 页面上的评论说它不适用于 VS2k5 中的 VB.NET。正确的警告它不受 VB.NET 8 - VS2k5 - 及以下版本的支持。 VB.NET 9 -- VS2k8 -- 及更高版本的 .NET 2.0 支持它。
    【解决方案3】:

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

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

    (我写了上面的内容,就像乔恩在这里添加了一个答案一样。)

    【讨论】:

    【解决方案4】:

    在托管代码中有一个粗略的 C++ 朋友关键字等价物。虽然它适用于程序集级别,而不是类级别。您可以使用[InternalsVisibleTo] attribute

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2010-09-19
      • 2011-08-10
      • 1970-01-01
      • 2011-06-28
      • 2015-10-21
      • 2010-11-20
      相关资源
      最近更新 更多