抽象类中的方法的extern,abstract和partial有什么区别?

问题描述

| 我之所以写抽象类,是因为我想提供一些常用的方法,需要一些过于具体的方法,并允许某些方法“扩展”。遇到编译器错误后,我想知道是否有人可以解释extern,abstract和局部关键字之间的区别。它们是什么意思,我应该在何时何地使用它们?     

解决方法

extern不太可能是您要使用的东西。这意味着该方法是实现的,但是是在外部实现的-通常在互操作方案中使用,其中您要定义在外部代码中实现的方法。 另一方面,抽象意味着您正在为该方法定义API,但未提供实现。子类将必须提供标记为“ 0”的任何方法或属性的实现,或者本身为“ 0”。如果要创建基类并具有必须由子类实现的方法或属性,则需要使用“ 0”。 局部类和方法仅仅是编译工具。它们允许您使用多个文件来定义您的类型。这通常与自动生成的代码一起使用(即:设计人员会将设计人员生成的代码放入定义局部类的单独文件中,因此您可以“填充”缺少的部分而无需查看实现细节)。您不太可能直接将其用于定义类。     ,通常通过dll导入(P / Invoke)实现
extern
方法-因此它确实具有实现-您看不到它。
partial
方法主要用于代码生成,作为将功能注入所生成代码的一种方式。它们是可选的,仅私有的,并且仅在您提供另一半时才存在。这样,在返回/输出值周围也有一些限制,以确保确定的分配。如果没有实现,则编译器将完全忽略对部分方法的调用。
abstract
方法是必须通过派生类型提供实现的地方。如果仍然存在未实现的抽象方法,则运行时可确保您无法拥有实例,因此可以确保它们将在运行时存在。     ,Extern将允许您通过dll-import使用方法,因此,该方法的特殊含义是它来自外部来源 部分: 局部方法必须在局部类或局部中声明 结构 您无法在部分方法上使用访问修饰符 局部方法不能具有访问修饰符或虚拟,抽象,覆盖,新的,密封的或外部修饰符 部分方法在单独声明之前无法实现。 局部方法只能定义,不能在同一局部类中声明。 * Partial和Abstract方法之间最重要的区别是Partial的实现是可选的,但Abstract方法的实现是强制的* 抽象方法严格要求在非抽象派生类中实现 抽象方法的基本用法是,它们必须被实现才能使用 该类,因为这些方法有助于有效利用该类     ,外部:http://msdn.microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx 一起使用abstract(C#参考)和extern修饰符来修改同一成员是错误的。使用extern修饰符意味着该方法在C#代码之外实现,而使用abstract修饰符意味着该方法的实现未在类中提供。 摘要:http://msdn.microsoft.com/en-us/library/sf985hc5%28v=vs.80%29.aspx 在类声明中使用abstract修饰符表示一个类仅打算作为其他类的基类。标记为抽象的成员或包含在抽象类中的成员必须由从抽象类派生的类实现。 部分:http://msdn.microsoft.com/en-us/library/wbx7zzdd%28v=vs.80%29.aspx 部分类型定义允许将类,结构或接口的定义拆分为多个文件。     ,这里似乎有一些不错的答案,但我还是会写得更清楚 外部 从C#规范 当方法声明包含extern修饰符时,该方法被称为外部方法。外部方法通常是使用C#以外的语言在外部实现的。由于外部方法声明不提供任何实际实现,因此外部方法的方法主体仅由分号组成。外部方法可能不是通用的。 extern修饰符通常与DllImport属性结合使用,从而允许通过DLL(动态链接库)实现外部方法。执行环境可以支持其他机制,从而可以提供外部方法的实现。当外部方法包含DllImport属性时,方法声明还必须包含静态修饰符。 部分的 部分方法的签名在部分类型的一部分中定义,其实现在类型的另一部分中定义。部分方法使类设计者可以提供类似于事件处理程序的方法挂钩,开发人员可以决定是否实现。如果开发人员未提供实现,则编译器会在编译时删除签名。以下条件适用于部分方法: 部分类型的两个部分中的签名必须匹配。 该方法必须返回void。 不允许使用访问修饰符。部分方法是隐式私有的。 以下示例显示了在部分类的两个部分中定义的部分方法: 抽象 在方法或属性声明中使用abstract修饰符可指示该方法或属性不包含实现。 抽象方法具有以下特征: 抽象方法隐式为虚拟方法。 抽象方法声明仅在抽象类中允许 因为抽象方法声明不提供任何实际实现,所以没有方法主体;方法声明仅以分号结尾,并且签名后没有花括号({})。 在抽象方法声明中使用静态或虚拟修饰符是错误的。 在此示例中,Square类必须提供Area的实现,因为它派生自ShapesClass: 资源 希望这有助于更好地理解,祝您编程愉快!