我得到的问题是“名称空间在C#项目中被用作类型”。我明白为什么会这样,我明白我要做些什么来解决它。但这对我来说没什么意义,因此这里的问题是理解C#上下文中命名空间和类的设计。
我希望这个问题与其他问题不同,因为我不是在问如何解决这个问题,而是在处理我描述的情况时如何保持逻辑和相关的命名。
我已遵循MSDN约定来命名解决方案。所以我有一个解决方案:
TesterStories.Voxam
我有两个项目。一个是TesterStories.Voxam.App
,看起来像这样:
namespace TesterStories.Voxam.App
{
TesterStories.Voxam.Parser parser = new TesterStories.Voxam.Parser();
class Program
{
}
}
问题在于第三行。
大概是因为我有另一个名为TesterStories.Voxam.Parser
的项目,看起来像这样:
namespace TesterStories.Voxam.Parser
{
public class Parser
{
}
}
所以它说它不喜欢我在项目命名空间中有“Parser”吗?
但根据MSDN指南,如果Parser是该功能,那么我应该称之为命名空间:[Company].[Project].[Feature]
。该课程为Parser
,因为毕竟这就是班级的作用。
所以看来我要做的就是:
namespace TesterStories.Voxam.Parser
{
public class Xyzzy
{
}
}
所以在这里我将Parser
课程改为Xyzzy
课程。现在回到导致问题的文件中我可以这样做:
using TesterStories.Voxam.Parser;
namespace TesterStories.Voxam.App
{
class Program
{
Xyzzy parser = new Xyzzy();
}
}
所以我明白了 - 但这意味着我必须改变我的课程才能成为不可能的事情。我意识到我可以称之为AppParser
或ParserApp
或其他任何内容。
在这种情况下,开发人员往往会做些什么?您是否更改了命名空间或更改了课程?即使在我的情况下,我正在根据MSDN指南描述该功能,并根据它的功能正确命名该类。)
答案 0 :(得分:1)
命名空间和类名称不是问题。 在原始代码中,您需要指定此“解析器”对象应该来自TesterStories.Voxam.Parser命名空间的类。
您的原始代码:
TesterStories.Voxam.Parser parser = new TesterStories.Voxam.Parser();
TesterStories.Voxam.Parser名称空间中应该是什么类/类型?
您需要这样做:
TesterStories.Voxam.Parser.*Parser* parser = new TesterStories.Voxam.Parser.*Parser*();
(*为强调添加:))
或者,就像您在上一个代码段中所做的那样,添加一个using语句:
using TesterStories.Voxam.Parser;
这样你就可以:
Parser parser = new Parser();
编辑 - 更完整的示例(针对'使用'建议):
namespace TesterStories.Voxam.App
{
using TesterStories.Voxam.Parser;
class Program
{
Parser parser = new Parser();
}
}
namespace TesterStories.Voxam.Parser
{
public class Parser
{
}
}