Pro*_*ope 22 c# abstract-class
我正在编写一个抽象类,因为我想提供一些常用的方法,需要一些过于具体的方法,并允许一些方法"扩展".遇到编译错误后,我想知道是否有人能解释extern,abstract和partial关键字之间的差异.他们的意思是什么,我应该在何时/何地使用它们?
Ree*_*sey 30
extern不太可能是你想要使用的东西.这意味着该方法已实现,但在外部实现 - 通常用于您在定义外部代码中实现的方法的互操作方案中.
另一方面,抽象意味着您要为方法定义API,但不提供实现.子类必须为标记的任何方法或属性提供实现abstract,或者abstract本身.如果要创建基类并且具有必须由子类实现的方法或属性,则需要使用abstract.
部分类和方法仅仅是一种编译工具.它们允许您使用多个文件来定义类型.这主要用于自动生成的代码(即:设计人员将设计器生成的代码放入定义分部类的单独文件中,因此您可以"填写"缺失的部分而无需查看实现细节).这不太可能直接用于定义类.
这里似乎有一些很好的答案,但我仍然会写信以使其更清楚
外部
来自 C# 规范
当方法声明包含 extern 修饰符时,该方法被称为外部方法。外部方法在外部实现,通常使用 C# 以外的语言。由于外部方法声明不提供实际的实现,因此外部方法的方法体仅由分号组成。外部方法可能不是通用的。extern 修饰符通常与 DllImport 属性结合使用,允许 DLL(动态链接库)实现外部方法。执行环境可以支持其他机制,由此可以提供外部方法的实现。当外部方法包含 DllImport 属性时,方法声明还必须包含 static 修饰符。

部分的
分部方法的签名在分部类型的一部分中定义,其实现在该类型的另一部分中定义。部分方法使类设计者能够提供类似于事件处理程序的方法挂钩,开发人员可以决定是否实现。如果开发人员不提供实现,编译器会在编译时删除签名。以下条件适用于部分方法:
以下示例显示了在分部类的两个部分中定义的分部方法:
抽象的
在方法或属性声明中使用abstract修饰符来指示该方法或属性不包含实现。
抽象方法具有以下特点:
在此示例中,类 Square 必须提供 Area 的实现,因为它派生自 ShapesClass:
希望这有助于更好地理解,祝编码愉快!
一个extern方法通常是通过dll-import(P/Invoke)实现的 - 所以它确实有一个实现 - 你只是看不到它.
一种partial方法主要用于代码生成,作为将功能注入生成的代码的方法.它们是可选的,仅限于私有,只有在您提供另一半时才存在.因此,在返回/输出值方面也存在一些限制,以确保明确分配.如果没有实现,编译器将完全省略对部分方法的调用.
一种abstract方法是必须由派生类型提供实现.如果仍有未实现的抽象方法,运行时可确保您不能拥有实例,因此可以确保它们将在运行时存在.
| 归档时间: |
|
| 查看次数: |
14711 次 |
| 最近记录: |