【问题标题】:Combine Partial Classes with Normal Classes结合部分类和普通类
【发布时间】:2012-06-12 05:56:33
【问题描述】:

是否可以像这样将普通类与部分类结合起来:

public class ClassA
{
    public string PropertyA {get; set;}
}

public partial class ClassA
{
    public string PropertyB {get; set;}
}

代码的结果应该是:

var instance = new ClassA();

instance.PropertyA = "Something";
instance.PropertyB = "Something else";

C# 是否支持这种模式?

提前谢谢大家!

【问题讨论】:

  • 你试过写这段代码了吗?
  • 我做了,但没有用。所以我希望是否有我遗漏的东西或任何其他替代方案来达到相同的结果?干杯。

标签: c# partial-classes


【解决方案1】:

简答:否。 MSDN 声明here

所有部分都必须使用 partial 关键字。所有部分必须在编译时可用以形成最终类型。所有部分必须具有相同的可访问性,例如公共、私有等。

【讨论】:

  • 不幸的是,当语言规范(在第 10.2 节的第二段中)说它不是关键字时,MSDN 明确地将其称为关键字:(
【解决方案2】:

没有。部分类的所有部分都必须包含 partial 修饰符。来自 C# 4 语言规范的第 10.2 节:

分部类型声明的每个部分都必须包含一个分部修饰符。它必须与其他部分具有相同的名称并在相同的命名空间或类型声明中声明。 partial 修饰符表示类型声明的附加部分可能存在于别处,但这些附加部分的存在不是必需的;具有单个声明的类型包含部分修饰符是有效的。

部分类型的所有部分必须一起编译,以便可以在编译时将这些部分合并为单个类型声明。部分类型特别不允许扩展已编译的类型。

(强调我的。)

【讨论】:

  • 谢谢,我希望 C# 的未来版本将支持类似于我在原始问题中提出的内容。
【解决方案3】:

在一个类上参与partial 的所有文件都必须使用partial 定义该类。此外,它们必须存在于同一个程序集中。

您可以使用多态性来扩展 ClassA。也有扩展方法,但顾名思义,你只能扩展方法。

这里是派生类,虽然它和partial完全不同。

public class ClassA
{

    public string PropertyA { get; set; }
}

public class ClassB : ClassA
{
    public string PropertyB { get; set; }
}

【讨论】:

  • 你是想说public class ClassB : ClassA吗?
猜你喜欢
  • 2019-07-14
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
相关资源
最近更新 更多