继承一个没有任何构造函数的抽象类我想从另一个类继承一个类,标记为抽象,没有定义任何构造函数。这是我的代码://在一个程序集(TheMessage.dll)中,如在VS中通过F12看到的(来自元数据)namespaceNamespace1{publicabstractclassMessage{publicstringBody{get;放;}//这里有一些抽象方法,没有显示。}}//在另一个程序集(TheUser.dll)namespaceNamespace2{publicclassMyMessage:Namespace1.Message{publicMyMessage(){}}}问题是在publicMyMessage()构造函数上我得到了错误的类型'Namespace1.Message'hasnoconstructordefined我在MSDN站点(抽象(C#参考)第一个示例)上读到,可以在没有构造函数的情况下继承抽象类。那么,有谁知道我为什么会收到此错误?请注意,当类型与Message类位于同一DLL中时,它可以继承,并且它可以将派生自Namespace1.Message的其他类型公开为该程序集,如下所示://ThesameassemblyasMessage(TheMessage.dll),正如在VS中通过F12看到的(来自元数据)namespaceNamespace3{publicclassMessage:Namespace1.Message{publicMessage(){}publicMessage(stringto){}}}我还检查了类型'...'nothing定义constructor,但它并没有讲继承,它只是创建了一个新的实例,我显然不希望直接实例化一个抽象类的实例。如果你没有看到Message类的任何实例构造函数(通常是因为它们都是私有的而你在类之外,或者它们都是私有的或内部的而你在程序集之外),你不能编写一个继承自Message的类。(好吧,您可以创建两个实例构造函数,它们使用:this(...)语法循环链接,但这是无用的)。请注意,当您查看“元数据”(伪C#为您引用的程序集生成的反射)时,您通常只会看到“可见”成员,因此不会显示任何私有或内部成员。我认为您查看元数据是因为我们看到了非抽象(和非外部)方法,这些方法缺少主体(只是一个分号;不是主体{...})。Message类的源代码将有一个或多个构造函数,每个构造函数都是私有的或内部的,但从程序集外部查看时它们是“不存在的”。如果非静态C#类Message的源代码不包含实例构造函数,编译器将自动生成一个。如果类是具体的(即非抽象的),它将是一个公共参数构造函数,如果类是抽象的,那么abstratc是一个受保护的构造函数。这意味着如果源代码看起来像这样:publicabstractclassMessage{//注意:这里有零个非静态构造函数}它将完全按照它所说的进行编译:publicabstractclassMessage{protectedMessage(){}}inhereIn在这种情况下,生成的实例构造函数可从派生自Message的所有类访问。您可能有一个内部构造函数(未在您发布的代码中显示)并试图使用来自不同程序集的内部构造函数实例化该类。(如果没有显式指定要调用的基类构造函数,则派生类会自动调用基类默认构造函数,因此可能不清楚是否调用了基类构造函数。)例如,如果一个程序集包含此类(在命名空间ClassLibrary1中):publicclassBase{internalBase(){}}一个不同的程序集执行此操作:classDerived:Base{publicDerived(){}}您将看到以下编译错误:Thetype'ClassLibrary1.Base'hasnoconstructorsdefined以上就是C#学习教程的全部内容:继承一个没有任何构造函数的抽象类。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
