首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使基础架构代码仅在名称空间中可见?

如何使基础架构代码仅在名称空间中可见?
EN

Stack Overflow用户
提问于 2012-07-18 19:37:28
回答 2查看 3.3K关注 0票数 3

我有一个Shunting-Yard算法的实现,我正试图将其清晰地集成到我们的框架中。目前,我将所有这些都打包到一个带有简单公共接口的类中。

代码语言:javascript
复制
namespace MathematicalParser {
  public class ExpressionParser {
    public ExpressionParser(string expression, List<string> variables);
    public double GetNumericValue(Dictionary<string,double> variableValues);
  }
}

在这个类中,有许多助手类、助手枚举、静态变量等,用于将不同的名称映射到函数。所有这些都是私有的,所以这与库的用户无关。

为了提高代码的可维护性,我试图将逻辑上不相关的代码分离到它们自己的类中,但是这些类在ExpressionParser之外没有任何意义,所以我想将它们的可见性限制在名称空间MathematicalParser (只包含ExpressionParser)。

如何在c#中最好地实现这一点,内部关键字只在程序集上有效,而private不能在命名空间中使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-18 21:54:45

我不会这么做(与Joe的观点相同),但这里有另一个源自Lopina的答案的解决方案:嵌套类+分部类

PublicClass.cs:

代码语言:javascript
复制
namespace MyNamespace
{
    public partial class PublicClass
    {
        public int ReturnSomeStuff()
        {
            MyHelperClass1 tmp = new MyHelperClass1();
            MyHelperClass2 tmp2 = new MyHelperClass2();

            return tmp.GetValue1() + tmp2.GetValue2();
        }
    }
}

PrivateClass1.cs:

代码语言:javascript
复制
namespace MyNamespace
{
    public partial class PublicClass
    {
        private class MyHelperClass1
        {
            public int GetValue1()
            {
                return 5;
            }
        }
    }
}

PrivateClass2.cs:

代码语言:javascript
复制
namespace MyNamespace
{
    public partial class PublicClass
    {
        private class MyHelperClass2
        {
            public int GetValue2()
            {
                return 10;
            }
        }
    }
}

Program.cs:

代码语言:javascript
复制
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私有的。

票数 1
EN

Stack Overflow用户

发布于 2012-07-18 19:40:25

您是否尝试过使用私有嵌套类?

看看这里:Private inner classes in C# - why aren't they used more often?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11540441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档