【发布时间】:2015-03-22 22:51:08
【问题描述】:
假设我有这些文件:
MyCode.cs
namespace MyCodeNamespace
{
public class MyClass
{
//OMITTED
}
internal static class MyExtensions
{
internal static void Foo(this string str)
{
//OMITTED
}
}
}
OtherCode.cs
using MyCodeNamespace;
namespace OtherCodeNamespace
{
//OMITTED
}
这两个文件是同一个程序集的一部分。有什么方法可以让 MyCode.cs 可以访问 Foo 而 OtherCode.cs 不能访问?我的问题类似于这个问题: C# Extension Methods only visible and accessible within one class ("private") 但它接受的答案并不是我真正想要的。我想制作一个仅对我正在处理的代码可见的扩展方法,并且根据上述问题的答案,仍然可以通过添加“使用”语句来访问它。有没有一种方法可以创建一个仅对我的代码可见的扩展方法,而在其他任何地方都看不到,甚至对同一程序集中的另一个类也不可见?
我问是因为调用扩展方法的语法很方便,并且对我正在处理的工作很有用(否则我只会创建一个私有方法),但我不希望其他人看到它并且从他们的代码中使用它,以防它没有按照他们假设的那样做。由于 Visual Studio 的智能感知,我的扩展方法目前显示在可用方法列表中(以及添加它们所在的命名空间的选项)。
【问题讨论】:
-
“但我不希望其他人看到它并从他们的代码中使用它,以防它没有按照他们假设的那样做”——然后明确它的作用?你为自己创造了很多工作来防止别人犯错
-
你能让OtherCodeNameSpace成为父命名空间吗?
-
C# 中的命名空间是有组织的,它们在控制可访问性方面没有任何作用。
-
@hometoast 本质上我希望它像一个私有方法,但想使用扩展方法语法。这可能吗?
-
另外,为什么要投反对票?我在询问之前搜索了答案,但没有找到我想要的东西。我的问题不清楚吗?请让我知道,以便我以后可以提出更好的问题。
标签: c# .net extension-methods access-modifiers class-visibility