gpt4 book ai didi

c# - 为什么在内部类中使用公共(public)方法?

转载 作者:IT王子 更新时间:2023-10-29 03:29:14 25 4
gpt4 key购买 nike

我们的一个项目中有很多代码如下所示:

internal static class Extensions
{
public static string AddFoo(this string s)
{
if (s == null)
{
return "Foo";
}

return $({s}Foo);
}
}

除了“以后公开类型更容易”之外,是否有任何明确的理由这样做?

我怀疑它只在非常奇怪的边缘情况(Silverlight 中的反射)或根本不重要。

最佳答案

更新:这个问题是 the subject of my blog in September 2014 .感谢您提出很好的问题!

甚至在编译器团队内部也对这个问题进行了大量辩论。

首先,了解规则是明智的。类或结构的公共(public)成员是可以访问任何可以访问包含类型的成员。因此内部类的公共(public)成员实际上是内部的。

那么现在,给定一个内部类,您希望在程序集中访问的它的成员应该标记为公共(public)的还是内部的?

我的意见是:将此类成员标记为公开。

我使用“public”来表示“这个成员不是实现细节”。 protected 成员是一个实现细节;使派生类工作需要一些关于它的东西。内部成员是一个实现细节;该程序集内部的其他内容需要该成员才能正常工作。一个公共(public)成员说“这个成员代表了这个对象提供的关键的、记录的功能。”

基本上,我的态度是:假设我决定把这个内部类变成一个公共(public)类。为此,我想更改一件事:类(class)的可访问性。如果将内部类转为公共(public)类意味着我还必须将内部成员转为公共(public)成员,那么该成员是该类的公共(public)表面区域的一部分,它应该是首先公开。

其他人不同意。有一群人说他们希望能够看一眼成员的声明并立即知道它是否仅从内部代码调用。

不幸的是,这并不总能很好地解决问题;例如,实现内部接口(interface)的内部类仍然必须将实现成员标记为公共(public)的,因为它们是类的公共(public)表面的一部分

关于c# - 为什么在内部类中使用公共(public)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9302236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com