【问题标题】:Partial class spanning assemblies部分类跨越程序集
【发布时间】:2010-12-20 15:02:41
【问题描述】:

在我的框架项目中,我有一个代表内容管理系统中选项卡的类。在某些框架实现中,希望使用特定于该实现的选项卡定义来扩展此类。我不得不通过将 CmsTabs 类更改为部分来做到这一点,如下所示:

namespace Framework
{
/// <summary>
/// Class containing common CMS Tab names
/// </summary>
public static partial class CmsTab
{
    /// <summary>
    /// Information Tab
    /// </summary>
    public const string Information = "Information";

然后在实现框架的程序集中创建一个具有相同名称和命名空间的类。

但是,当我构建框架程序集时,CmsTabs 类似乎不再是部分的 - 当我将部分类添加到其中时,它的成员隐藏在实现程序集中。在 Reflector 中拆卸时,我得到了这个:

public class CmsTab
{...

假设可以做我想做的事情,我需要做些什么来使其保持其部分状态。

谢谢。

【问题讨论】:

  • 为什么?你想做什么?

标签: c# .net partial-classes


【解决方案1】:

你不能有一个部分类 span 程序集:

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

MSDN On Partial Classes

【讨论】:

    【解决方案2】:

    您可以使用Extension methods 向其他程序集中的类添加新方法。

    【讨论】:

      【解决方案3】:

      部分类是纯粹的编译时特性。
      无法创建跨多个程序集的类定义。

      相反,您可以将类设为非静态单例,并允许实现继承该类,为其添加属性,并将继承的版本设置为单例实例。

      如果它纯粹是const 字符串的集合,您可以将其设为private partial 类,但在每个项目中添加指向该文件的链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 2022-07-27
        • 1970-01-01
        相关资源
        最近更新 更多