【问题标题】:Create a class library consisting of many sub-classes创建一个由许多子类组成的类库
【发布时间】:2013-01-22 16:24:24
【问题描述】:

这是我之前的问题Stop my "Utility" from giving errors between different architectures 的后续,假设我正在尝试创建一个看起来像这样的类库:

- Class Utility (Parent class)
     ... Utility functions and methods
         (EG: Public Sub Sub1() )

  - Class Utility_Web
       ... Functions and methods only related to Web / Web-Controls
         (EG: Public Sub Web_Sub1() )

  - Class Utility_WinForms
       ... Functions and methods only related to Winforms / WinForm-Controls
         (EG: Public Sub WinForm_Sub1() )

现在,我想做的就是添加Utility dll 作为对我的任何项目的引用,并且只需输入即可访问所有 3 个类中的函数和方法,例如:

Utility.Sub1
Utility.WebSub1
Utility.WinFormSub1

换句话说,不必输入

Utility.Utility_Web.Websub1

为了让最终程序员不需要知道这个实用程序的内部结构,他们可以使用Utility. 命名法来引用它的所有方法/函数。

我该怎么做呢?这是NameSpaces 生效的地方吗? Inheritance? Partial Classes? Modules 而不是类?

【问题讨论】:

  • 你是说你想让 WinForm 实现和 Web 实现都使用相同的方法名,然后让使用它的代码不知道实际调用的是哪个实现?
  • 对不起,@Steven - 不,每个类都有自己的模块和功能,并且类之间没有重复名称......

标签: c# .net vb.net oop


【解决方案1】:

如果要使用相同的类名访问这些方法,似乎没有任何理由将它们放在不同的类中。

如果您想将代码拆分到多个源文件以用于组织目的,您可以使用partial classes

【讨论】:

  • 请注意,对于partial classes,它们必须在同一个命名空间中。
  • 只要所有部分类都在同一个项目/程序集中。
  • @StevenDoggart:OP 正在“尝试创建一个类库”并引用“Utility dll”。这听起来像是一个程序集。
  • 这是一个程序集 - 谢谢@Jon,我实际上更新了我的问题,因为我正在考虑这个问题......这对我来说仍然相当混乱(最佳编程实践),但是确实很有意义。
【解决方案2】:

这似乎是一个极好的实例,您希望在其中使用部分类,所有类都使用相同的 Utility 命名空间。这将允许您使用 Utility.WebSub1 访问方法并减少一个步骤。

【讨论】:

  • 谢谢@David,看来这是我被大家指出的地方。 +1 非常感谢您的回答,因为乔恩首先回答了这个问题,所以我将把这个问题交给他。谢谢!!!!
  • 不公平:)。我只是在打字,从不费心扩展查看当前答案。很高兴听到它有帮助!
【解决方案3】:

一个名为Utility 的类从一开始就是一个糟糕的类。它的用途是什么?它对你有什么帮助?有多少其他人将命名类实用程序?

根据它们的作用命名您的类,将它们关联到具有逻辑和功能意义的命名空间中。

假设您正在创建一组静态方法来帮助处理表示Month 的类。为什么不将方法放入Month?如果您正在编写将数据从一种表示形式转换为另一种表示形式的方法,请以这种方式命名(即MonthDataTranslation)。

不必担心您的客户或您的客户代码会打字。 Intellisense 和 C# using 语句在很大程度上缓解了这种情况,并且考虑到在名称错误、模糊不清的实用程序类和长而名称良好的类之间进行选择,我每次都会选择后者。

【讨论】:

  • 谢谢,@plinth,我非常感谢您的建议,并且实际上正在这样编程,我只是使用了 Utility 示例,因为它似乎是解释我的问题的最简单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多