部分类跨越程序集

时间:2010-12-20 15:02:41

标签: c# .net partial-classes

在我的框架项目中,我有一个表示内容管理系统中的选项卡的类。在某些framewrok实现中,需要使用特定于该实现的选项卡的定义来扩展此类。我通过将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
{...

我是否需要采取措施使其保持部分状态,假设可以做我想做的事情。

感谢。

3 个答案:

答案 0 :(得分:21)

您不能拥有部分类跨度程序集:

  

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

MSDN On Partial Classes

答案 1 :(得分:7)

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

答案 2 :(得分:6)

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

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

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