【问题标题】:What is the difference between an internal and a public class in c#? [duplicate]c#中的内部类和公共类有什么区别? [复制]
【发布时间】:2016-09-20 23:43:56
【问题描述】:

以下类声明是什么意思?

internal class A { }

public class B { }

我可以使用具有 A 类和 B 类的程序集的引用在另一个程序集中的另一个类中访问它们。就类而言,内部访问说明符和公共访问说明符有什么区别?

【问题讨论】:

  • 您应该无法从另一个程序集访问 A 类。
  • @Blorgbeard 除非他使用的是InternalsVisibleToAttribute
  • 是的,但你会认为他会在问题中提到这一点 - 这不是你可以错误地做的事情..
  • 也许这是在一个已经建立的项目中并且没有意识到它已经到位。我不同意你的观点,只是指出一个小警告:)
  • @Aditya Shukla 正如 Lukazoid 所说,您不应该能够从另一个程序集访问 internal 类 A,除非您对该程序集使用 InternalsVisibleToAttribute。也许你误解了程序集的定义?

标签: c# .net


【解决方案1】:

internal 意味着它只能被同一程序集中的其他类访问。公共意味着它对所有其他类都可用。

【讨论】:

  • 两者在技术上没有区别。在 C# 中,public 的意思是“任何可以看到该类的人都可以访问”;将内部类设为公共成员并不会使该成员更易于访问。
【解决方案2】:

Internal 仅在它所在的程序集中可用。

Public 可供任何引用它所在的程序集的程序集使用。

如果您可以从另一个程序集访问内部类,则您要么设置了“InternalsVisibleTo”,要么没有引用您认为的类。

【讨论】:

  • 如何更改 InternalsVisibleTo?
  • @AdityaShukla - 在您的AssemblyInfo.cs 文件中,您可以将[assembly:InternalsVisibleTo("AssemblyB")] 放入其中以使AssemblyB 可以使用内部类、方法等。这通常用于测试目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多