2012-06-12 58 views
1

是否可以正常类与部分类这样的组合:合并分部类与普通类

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#这模式?

谢谢大家提前!

+4

你是否试过编写这段代码? – V4Vendetta

+0

我做了,但没有奏效。所以我希望是否有我缺少的东西或其他替代方案来实现相同的结果?干杯。 –

回答

1

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

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

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

(重点煤矿。)

+0

)谢谢,我希望未来版本的C#将支持类似于我在原问题中提出了要求 –

4

简短的回答:的MSDN指出here

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

+2

不幸的是,当语言规范说明(在第10.2节的第二段)中,MSDN明确将其称为关键字时,它不是*关键字:( –

0

上一类partial单打独斗的所有文件必须与partial定义类。此外,它们必须存在于同一个组件中。

您可以使用多态性来扩展ClassA。还有扩展方法,但按照名称状态,您只能扩展方法。

这里是衍生类,虽然它不完全相同partial

public class ClassA 
{ 

    public string PropertyA { get; set; } 
} 

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

您是否打算说'公共班ClassB:ClassA'? –

+0

是的,我做过了:(谢谢! – HackedByChinese