gpt4 book ai didi

c# - 命名空间和类 - 解决命名歧义

转载 作者:行者123 更新时间:2023-12-04 17:02:18 24 4
gpt4 key购买 nike

我遇到的问题是在 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
{
}
}

那么是说它不喜欢我的命名空间中有项目的“解析器”吗?

但根据 MSDN 指南,如果解析器是功能,那么这就是我应该调用的命名空间: [Company].[Project].[Feature] .类(class)是 Parser因为,毕竟这就是类(class)所做的。

所以看起来我必须做的是:
namespace TesterStories.Voxam.Parser
{
public class Xyzzy
{
}
}

所以在这里我改变了我的 Parser类到 Xyzzy类(class)。现在回到导致问题的文件中,我可以这样做:
using TesterStories.Voxam.Parser;

namespace TesterStories.Voxam.App
{
class Program
{
Xyzzy parser = new Xyzzy();
}
}

所以我明白了——但这意味着我必须改变我的类(class),使其成为不是。我意识到我可以称之为 AppParserParserApp管他呢。

在这种情况下,开发人员倾向于做什么?你改变了你的命名空间还是你改变了你的类?尽管如此,就我而言,我是根据 MSDN 指南描述该功能并根据其功能正确命名该类。)

最佳答案

命名空间和类名在这里不是问题。
在您的原始代码中,您需要从 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
{
}
}

关于c# - 命名空间和类 - 解决命名歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com