我有一个Shunting-Yard算法的实现,我正试图将其清晰地集成到我们的框架中。目前,我将所有这些都打包到一个带有简单公共接口的类中。
namespace MathematicalParser {
public class ExpressionParser {
public ExpressionParser(string expression, List<string> variables);
public double GetNumericValue(Dictionary<string,double> variableValues);
}
}在这个类中,有许多助手类、助手枚举、静态变量等,用于将不同的名称映射到函数。所有这些都是私有的,所以这与库的用户无关。
为了提高代码的可维护性,我试图将逻辑上不相关的代码分离到它们自己的类中,但是这些类在ExpressionParser之外没有任何意义,所以我想将它们的可见性限制在名称空间MathematicalParser (只包含ExpressionParser)。
如何在c#中最好地实现这一点,内部关键字只在程序集上有效,而private不能在命名空间中使用。
发布于 2012-07-18 21:54:45
我不会这么做(与Joe的观点相同),但这里有另一个源自Lopina的答案的解决方案:嵌套类+分部类。
PublicClass.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;
}
}
}
}Program.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();
}
}正如您所看到的,不同的helper类在物理上分隔在不同的文件中(也许这将帮助您维护代码)。而且你不能直接访问它们,它们是PublicClass私有的。
发布于 2012-07-18 19:40:25
您是否尝试过使用私有嵌套类?
看看这里:Private inner classes in C# - why aren't they used more often?
https://stackoverflow.com/questions/11540441
复制相似问题