C#父类无体构造函数语法疑问及子类实现困惑
C#构造函数语法疑问解答
问题背景代码
父类与子类代码:
public class ParentClass { public ParentClass(); public RandomEnumerated Random_Enumerated; //No get/set. Relevant? } public class ReceivedClass : ParentClass { public ReceivedClass(); public char Random_Field { get; set; } }
自己编写的子类代码(报错):
public class ExtendedReceivedClass : ReceivedClass { public ExtendedReceivedClass(); public char A_New_Random_Field_of_My_Own { get; set; } }
报错信息:
ExtendedReceivedClass.ExtendedReceivedClass() must declare a body because it is not marked abstract, extern, or partial FuelTaCSClient
问题
a. ReceivedClass中的public ReceivedClass();是构造函数吗?ParentClass中的同理?
b. 如果是,为何父类可以用这种简化写法而我不行?如果不是,那它是什么?
解答
- a. 是构造函数。
ParentClass和ReceivedClass里的public 类名();写法都是构造函数的声明,只是没有编写实现体。 - b. 父类的这种写法基本都是工具自动生成的代码(比如WCF服务引用、ORM框架生成的实体类),这类构造函数要么标记了
extern(表示实现体在外部非托管代码中),要么属于partial类(实现体在另一个.cs文件中)。
你自己编写的ExtendedReceivedClass没有标记extern、abstract或partial,C#编译器要求这类非特殊标记的成员必须提供具体实现体——哪怕是空的{},所以必须写成public ExtendedReceivedClass () {}。
内容的提问来源于stack exchange,提问作者E Devitt
相关产品推荐
相关产品推荐

