c# - 内部类放在哪里?

标签 c# namespaces

假设我正在制作一个新的图书馆,Jokes, 有一个小的 API。为了使我的 API 易于使用,我将它放在基本命名空间中:

namespace Jokes

    --> public interface IJoker
        --> string Joke();

    --> public static class Jokers
        --> public static IJoker NewSlapstickJoker()
        --> public static IJoker NewAbsurdJoker()
        --> public static IJoker NewCheesyJoker()

clown 的实现是内部的:

--> internal class SlapstickJoker : IJoker
--> internal class AbsurdJoker : IJoker
--> internal class CheesyJoker : IJoker

现在我很确定以下是要遵循的准则(有人可以验证一下吗?):

  • 不要从根命名空间的子命名空间访问类型。 (例如,System 中的类型不知道 System.Drawing 中的类型)。

此准则是否适用于内部类?为了避免污染我的根 namespace ,我想将我的内部类放在 Jokes.Internal 中。这意味着 Jokes 命名空间 (Jokers) 中的类型将了解子命名空间 Jokes.Internal 中的类型。这样可以吗?

最佳答案

To avoid polluting my root namespace, I would like to put my internal classes in Jokes.Internal. This would mean that a type in the Jokes namespace (Jokers) would know about types in the subnamespace Jokes.Internal. Is this ok?

是的,没关系。关于不让 namespace 中的类型依赖于“子” namespace 中的类型的主要指南实际上更多地是关于公共(public) API。仅由内部类型使用的内部类和命名空间实际上是一个实现细节,并且在任何此类指南之外。

我会坚持您认为有意义的一致做法。使用内部命名空间似乎是合理的(尽管我可能会做类似命名空间 Jokes.Implementations 的事情)。

此外,鉴于您的 Jokers 类正在构建新实例,它基本上是一个工厂。您可能需要考虑命名更像 JokerFactory 的名称以使其显而易见。 Joker,对我来说,意味着类中包含一组 Joker 实例,而不是一组工厂方法。

关于c# - 内部类放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672792/

相关文章:

c# - String 类中的线程安全

c# - 为什么我的代码不符合 CLS?

php - 未找到类,在命名空间中使用 include_once

c# - 为什么这个异步 lambda 函数调用不能在 C# 中编译?

c# - 如何使用 json.net 在 POST 请求上进行 asp.net core 模型绑定(bind)?

c# - 使用 Resharper 7.1 插件从 IClass 中删除 IProperty

objective-c - Objective C : Version of JSON library I'm compiling in present in another library I'm linking in via . a,如何解决冲突?

lua - Lua 中使用 "."表示法与 __index 和命名空间的混淆

php - 在 PHP 5.2 If 语句中使用命名空间

c++ - 有没有办法警告我全局命名空间污染?