【问题标题】:Difference between Interface, abstract class, sealed class, static class and partial class in C#? [closed]C#中接口、抽象类、密封类、静态类和部分类的区别? [关闭]
【发布时间】:2011-01-21 06:34:57
【问题描述】:

c#中接口、抽象类、密封类、静态类和局部类的区别?如果 vb.net 中的所有类都可用?

【问题讨论】:

  • 阅读一本书,或 C# 简介。或者如果你很勇敢,ECMA 规范。
  • @leppie - 在我看来,ECMA 规范非常容易遵循。
  • @ChaosPandion:是的,我同意,但不适合不懂基本概念的新手。
  • @ChaosPandion 哈哈,我经常发现它比 msdn docs 简单:)

标签: c#


【解决方案1】:
  • 抽象类
    应该在存在 IS-A 关系并且不允许从该抽象类创建实例时使用。 示例:Animal 是一个抽象基类,可以从中派生特定的动物,例如 Horse、Pig 等。 通过使 Animal 抽象化,不允许创建 Animal 实例。

  • 界面
    应该使用接口来实现类中的功能。假设我们希望一匹马能够跳跃,那么可以创建一个界面 IJumping。通过将此接口添加到 Horse,应该实现 IJumping 中的所有方法。在 IJumping 本身中只有声明(例如定义了 StartJump 和 EndJump),在 Horse 中应该添加这两种方法的实现。

  • 密封类
    通过使马密封,不可能从它继承,例如制作你喜欢从 Horse 继承的 Pony 或 WorkHorse 类。

  • 静态类
    主要用于“实用”功能。假设您需要某种方法来计算要在 Horse 类中使用的某些数字的平均值,但您不想将其放在 Horse 中,因为它不相关并且与动物也不相关,您可以创建一个类来有这种方法。您不需要此类实用程序类的实例。

  • 部分类
    分部类无非是将一个类的文件拆分为多个较小的文件。这样做的一个原因可能是只与其他人共享部分源代码。如果原因是文件太大,请考虑先将类拆分为较小的类。

【讨论】:

  • 优秀且非常简单。找不到这么容易的。非常感谢
【解决方案2】:
  • 接口:仅限方法定义

  • 抽象类:一些方法实现,一些方法抽象(仅限方法定义)

  • 密封类:您可以从中获得的类 不能继承

  • 静态类:一个只有 静态方法(无实例 存在,所有方法都可以调用 没有实例)

  • 部分类:一个类是 定义在 2 个或多个单独的 不同的类定义 模块。

是的,它们在 C# 和 VB 中都可用,尽管 VB 在某些情况下使用不同的关键字。

【讨论】:

    【解决方案3】:

    我想下面的链接会对你有用。

    http://letschattechnology.com/interface-vs-abstract-classes/

    基本的逻辑区别是当两个类之间存在将继承抽象类的关系时创建抽象类,并且为彼此不相关但具有一些共同功能的类创建接口。

    【讨论】:

    • 其他人点击了这个链接吗??它没有带我去任何与代码相关的东西......对我来说是一个相当顽皮的链接,哈哈
    • @fifamaniac04:对不起,链接已更改。我已经更新了链接。您现在应该可以看到该帖子了。
    【解决方案4】:

    normal 类可以在运行时实例化以形成具有字段的对象(字段是属性、函数、事件等)。 normal 类也可以被继承/子类化。

    添加一个额外的关键字会改变类的工作方式。

    • 添加 public, private, protected 会改变其他代码查看和使用此类的方式。
    • static 添加到类中意味着您不能使用new 关键字创建实例,而只能通过静态函数访问它。示例:String.IsNullOrEmpty()
    • sealed 添加到一个类意味着没有其他类可以继承“密封”类。

    接口是contracts,表示实现类将提供一些功能。 IDisposable 接口表示所有实现它的类都会有一个 Dispose 函数。

    【讨论】:

      【解决方案5】:

      抽象和接口的区别如下:

      1. 抽象类有方法声明和方法定义,而接口只有方法声明。

      2. 抽象类称为部分抽象类,而接口称为完全抽象类。

      3. 抽象类特性由子类继承,而接口特性必须在实现类中实现。

      4. 抽象类支持访问说明符,而接口不支持访问说明符。

      5. 抽象类有普通变量和常量变量,而接口没有变量。

      6. 我们可以在抽象类中编写构造函数,而不能在接口中编写构造函数。

      【讨论】:

      • "接口不支持访问说明符。" - 我默认使用 internal 和 public。
      【解决方案6】:

      在抽象类中可以提供更多功能而不影响子类。 在接口中,如果我们在接口中添加任何方法,都会影响到所有的子类。

      【讨论】:

      • 我认为您应该详细说明您的帖子,以确保它为 OP 提供正确的答案。另请查看我们的常见问题解答:stackoverflow.com/faq。祝你好运。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多