我有一个 Shunting-Yard 算法的实现,我正试图将其清楚地集成到我们的框架中。目前,我已将所有内容打包到一个具有简单公共(public)接口(interface)的类中。
namespace MathematicalParser {
public class ExpressionParser {
public ExpressionParser(string expression, List<string> variables);
public double GetNumericValue(Dictionary<string,double> variableValues);
}
}
在这个类中有很多帮助器类、帮助器枚举、静态变量等来将不同的名称映射到函数。所有这些都是私有(private)的,因此图书馆的用户无需担心。
为了提高代码的可维护性,我试图将逻辑上不相关的代码分离到它们自己的类中,但是这些类在 ExpressionParser 之外没有任何意义,所以我想将它们的可见性限制为命名空间 MathematicalParser(仅包含 ExpressionParser)。
如何在 C# 中最好地完成此操作,internal 关键字仅适用于程序集,而 private 不能用于命名空间。
最佳答案
我不会这样做(与 Joe 的观点相同),但这是从 Lopina 的回答中得出的另一种解决方案:嵌套类 + 部分类。
公共(public)类.cs:
namespace MyNamespace
{
public partial class PublicClass
{
public int ReturnSomeStuff()
{
MyHelperClass1 tmp = new MyHelperClass1();
MyHelperClass2 tmp2 = new MyHelperClass2();
return tmp.GetValue1() + tmp2.GetValue2();
}
}
}
PrivateClass1.cs:
namespace MyNamespace
{
public partial class PublicClass
{
private class MyHelperClass1
{
public int GetValue1()
{
return 5;
}
}
}
}
PrivateClass2.cs:
namespace MyNamespace
{
public partial class PublicClass
{
private class MyHelperClass2
{
public int GetValue2()
{
return 10;
}
}
}
}
程序.cs:
public class Program
{
private static void Main(string[] args)
{
PublicClass tmp = new PublicClass();
MyHelperClass2 zz; // Can't access MyHelperClass2 here cause it's private
Console.WriteLine(tmp.ReturnSomeStuff());
Console.ReadLine();
}
}
如您所见,您的不同帮助程序类在物理上被分隔在不同的文件中(也许它会帮助您维护您的代码)。您不能直接访问它们,它们是 PublicClass
私有(private)的。
关于c# - 如何使基础架构代码仅在命名空间中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540441/