我有调度场算法,我想清楚地融入我们的框架的实现。 目前,我有这一切包装成一个类用一个简单的公共接口。
namespace MathematicalParser {
public class ExpressionParser {
public ExpressionParser(string expression, List<string> variables);
public double GetNumericValue(Dictionary<string,double> variableValues);
}
}
这个类里面有很多的辅助类,帮助枚举,静态变量等,以不同的名称将函数映射。 所有这些都是私有,这样不用担心图书馆的用户。
为了改善我试图分开的代码,在逻辑上是不相关的到自己的类代码的可维护性的努力,这样的类也不过没有ExpressionParser以外的任何意义,所以我想自己的知名度限制在命名空间MathematicalParser (其仅包含ExpressionParser)。
你如何最好在C#中实现这一点,内部关键字仅适用于组件和私人不能在命名空间中使用。
我不会做这个(相同的看法乔),但这里是从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();
}
}
正如你所看到的,您不同的辅助类不同文件中的物理分离(也许它会帮助你保持你的代码)。 你不能直接访问他们,他们是私有的PublicClass
。
您可以选择使用私有嵌套类试过吗?
参加这里看看: 私有内部类在C#中-他们为什么不使用更频繁?
如果你真的不顾一切地做到这一点(我在原来的问题意见的光),你可以把所有的辅助类到一个单一的组件,使它们的内部,所以他们有效地利用关闭。 然后进行第二组件,你让人们使用的一个,并把“公众”的类和方法,第二安装。 然后使用InternalsVisibleTo
让你的“公”装配使用其他“私人”组件的辅助类和方法。
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx
这并不意味着你必须要强迫人们使用你的库中不同的装配工作,以包含您的“公”库代码之一。 我想从你的问题你是说,他们是在同一程序,在这种情况下,你必须在“公共”图书馆出来分成不同的装配工作。 如果你没有这样做,那么简单地使内部的方法,并把它们放在同一个议会将做的工作毕竟。
如果你去这两个组装的路线,如果你的同事在同一组装工作,至少有一个在引用可能会阻止他们使用它的另一个装配额外的“一步”。
如果这还不够的......我不知道,写一个WCF web服务,通过这项工作*。
*这是讽刺