我可以限制 C# 扩展方法对同一程序集中的类的可见性吗?

ine*_*ine 4 .net c# extension-methods access-modifiers class-visibility

假设我有这些文件:

MyCode.cs

namespace MyCodeNamespace
{
  public class MyClass
  {
    //OMITTED
  }

  internal static class MyExtensions
  {
    internal static void Foo(this string str)
    {
      //OMITTED
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

其他代码.cs

using MyCodeNamespace;
namespace OtherCodeNamespace
{
  //OMITTED
}
Run Code Online (Sandbox Code Playgroud)

这两个文件是同一程序集的一部分。有什么方法可以使 Foo 可以访问 MyCode.cs 但不能访问 OtherCode.cs?我的问题与这个问题类似: C# ExtensionMethods onlyvisible andaccessible inside one class ("private") 但它接受的答案并不是我真正想要的。我想创建一个仅对我正在处理的代码可见的扩展方法,并且根据上述问题的答案,有人仍然可以通过添加“using”语句来访问它。有没有一种方法可以创建一个仅对我的代码可见的扩展方法,而在其他地方都看不到,甚至对同一程序集中的另一个类也不可见?

我问这个问题是因为调用扩展方法的语法很方便,并且对我正在处理的事情很有用(否则我只是创建一个私有方法),但我不希望其他人看到它并使用它他们的代码,以防它没有按照他们假设的那样进行。感谢 Visual Studio 的智能感知,我的扩展方法当前显示在可用方法列表中(以及添加它们所在命名空间的选项)。

小智 5

.NET 平台中不存在命名空间限制访问修饰符之类的东西。 来自文档

public :访问不受限制。
protected :访问仅限于包含类或从包含类派生的类型。
内部:访问仅限于当前程序集。
protected inside:访问仅限于当前程序集或从包含类派生的类型。
private :访问仅限于包含类型。

这就是您需要处理的全部内容。所以答案是否定的