【问题标题】:Partial classes in separate dlls单独 dll 中的部分类
【发布时间】:2019-09-05 16:10:50
【问题描述】:

是否可以在单独的 DLL 中对部分类有两个部分(相同的命名空间、相同的类名)?

【问题讨论】:

  • 就像其他人说的那样,这是不可能的,但是有办法用来自不同来源的新行为来补充类,你到底想在不同的 dll 中做什么?
  • 就我而言,我想将几​​个静态方法添加到在第 3 方库中定义的类中。扩展方法不起作用,接口和继承也不起作用,因为类是静态的。在发现您可以拥有部分静态类后,我来这里看看它是否可以跨程序集工作,但可惜看起来这也不起作用。

标签: c# dll partial-classes


【解决方案1】:

来自MSDN -Partial Classes and Methods

所有的部分类型定义意味着 必须是同一类型的零件 在同一个程序集中定义和 相同的模块(.exe 或 .dll 文件)。 部分定义不能跨越 多个模块。

【讨论】:

    【解决方案2】:

    没有。部分类是纯粹的语言特性。编译程序集时,将组合文件以创建类型。无法将文件分散到不同的程序集中。

    不过,根据您想做什么,您也许可以使用extension methods 来完成您需要的工作。

    【讨论】:

      【解决方案3】:

      不,这是不可能的。编译程序集时,需要完成类。

      【讨论】:

        【解决方案4】:

        虽然其他答案确实提供了任何登陆此页面的人都不想看到或听到的令人不快的“不”,但我对这里尚未提及的另一个想法感到震惊。如果允许跨程序集使用部分类,则可以访问不是由他编写的现有类型的私有成员,从而允许他以原始作者不打算的方式操作它们,从而危及所有继承类的功能也是。

        不仅如此,其他程序集中的那些类(及其子类)还需要重新编译才能使其工作。因此,从逻辑上讲,不允许将一个类拆分到不同的程序集上。

        【讨论】:

        • 如果真的需要,可以很容易地通过反射与私人成员混淆。不能在程序集之间拆分类,因为不允许循环引用,并且需要它们才能使类的不同部分进行交互。
        • "可以访问现有类型的私有成员,这些成员不是由 him 编写的,因此允许 him 操纵它们" -- 他还是她?还是他们?为什么你认为程序员一定是男性?这个答案不是作为私人的,而是以“dotNet”的名义做出的,这真的不够好。
        【解决方案5】:

        当您想将方法添加到不同 dll 中的类时,您可以使用扩展方法。 此方法的一个缺点是您无法添加静态方法。

        【讨论】:

          【解决方案6】:

          问题是你为什么要在另一个程序集中创建一个部分类?您可以跨程序集定义抽象类和接口,也许您需要研究一下。

          【讨论】:

          • 恕我直言,存在有效的情况,例如:您可能希望将 MVC 表单注释添加到在不同程序集中定义的模型类。程序集本身不知道它在哪个上下文中使用,因此程序集中的类不应该有任何注释。不过,它们可以添加到 MVC 上下文中的部分类中(如果可能的话)。
          • nyi,为什么不从那个类继承并在上面声明你的属性呢?如果您愿意,您甚至可以将其命名为相同的名称。
          【解决方案7】:

          您可能只想在您自己的库中围绕第三部分库中的类创建一个 Wrapper 类。然后将任何功能添加到包装类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多