接口与抽象类[重复]

2023-12-13

在C#中,什么时候应该使用接口,什么时候应该使用抽象类?什么可能是决定因素?


更新:C# 8.0 新功能:从 C# 8.0 开始,接口可以定义成员的默认实现,包括属性。在接口中定义属性的默认实现很少见,因为接口可能不定义实例数据字段。

抽象类的优点是:

  • 能够指定方法的默认实现
  • 为函数添加不变检查
  • 对如何调用“接口”方法有更多的控制
  • 能够“免费”提供与界面相关或无关的行为

接口只是数据传递契约,不具有这些功能。然而,它们通常更灵活,因为一种类型只能从一个类派生,但可以实现任意数量的接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口与抽象类[重复] 的相关文章

  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 测试无法直接访问的 RSpec 控制器操作

    我有一个控制器 无法以传统的 RESTful 方式直接访问 而只能通过特定的 url 访问 通常我习惯在控制器规范中使用 get 和 post 来调用控制器操作 有没有一种方法可以通过访问特定的网址来使用我的控制器 EDIT 这是我的路线
  • 如何防止任务同步继续?

    我有一些库 套接字网络 代码提供了Task based API 用于待处理的请求响应 基于TaskCompletionSource
  • std::mt19937 需要预热吗?

    我读到许多伪随机数生成器需要许多样本才能 预热 使用 std random device 播种 std mt19937 时就是这种情况 还是我们可以期望它在构造后准备就绪 有问题的代码 include
  • 如何在 React Native> 中从一个屏幕导航到另一个屏幕?

    解释 我在 android 中使用 React Native 我从登录屏幕开始 并使用 API 成功调用将参数传递到另一个屏幕 我使用 StackNavigation 来导航屏幕 登录成功后 将转到另一个带有参数的屏幕 Issue API调
  • 尝试确定屏幕是否关闭时检测常亮显示

    我正在尝试找出如何检测 Android 上的显示屏是否关闭 并且我感觉 S10 上的常亮显示屏正在影响我的结果 目前 我正在使用中找到的逻辑这个 stackoverflow 答案 还有对该线程的评论这说明你应该能够使用Display FLA
  • 使用paintComponent()在JFrame中绘制矩形

    我正在尝试创建一个使用 JPanel 的 PaintComponent 绘制形状 下面示例中的矩形 的程序 但我无法让它工作 也无法发现问题所在 代码如下 import javax swing import java awt public
  • 获取子数组键php

    我有一个数组 Array 47 gt Array name gt 3543 good price gt 100 0000 image gt data hp 1 jpg discount gt stock status gt weight c
  • 如何检测设备支持哪些语言字体?

    比如说 我想以本机脚本显示 10 种语言的列表 如果手机不支持该字体 它将回退到英语脚本 有什么方法可以检测特定设备支持哪些字体 换句话说 我只是想检查 punjabi 是否可以显示为 为了安全起见 我会同时使用英文名和本地名 这就是我实际
  • WordPress 自定义帖子类别过滤器

    我试图在我的作品集模板页面中仅显示名为作品集的自定义帖子的某些类别 我可以按 slug 仅显示 1 个类别 但我需要显示 1 个以上类别 并且我想知道是否有办法按 ID 过滤类别 CODE global wp query portfolio
  • 在 SelectField 和 HiddenField 之间动态更改 WTForms 字段类型

    我有一个 WTForms 字段 value currency 我希望它有时是 SelectField 有时是 HiddenField 我对页面使用相同的视图和模板 既创建新项目又编辑现有项目 如果我加载页面来创建新项目 我希望此字段成为 S
  • 如何用Jackson解析一个可能是字符串也可能是数组的json字段

    我有一个 json 字段 当有一个值时它是字符串 theField oneValue 当有多个值时或数组 theField firstValue secondValue 然后我有一个使用 com fasterxml jackson anno
  • 在 64 位 Windows 上设置汇编器 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我真的需要一些帮助 我已经在网上搜索了大约两天 似乎无法找到我遇到的问题的答案 我下载了 nasm 并安装了它 它似乎可以工作 但我似乎找不到任何适用于 Windows 64 位
  • 将非常大的 csv 文件与公共列合并

    例如 我有两个 csv 文件 0 csv 100a a b c c 200a b c c c 300a c d c c 和 1 csv 100a Emma Thomas 200a Alex Jason 400a Sanjay Gupta 5
  • ajax xhr lengthComputable 使用 php 文件返回 false

    我正在使用 XMLHttpRequest 执行 ajax 请求 以显示请求的进度 它对于 html 文件工作得很好 但是 evt lengthComputable 对于 php 文件返回 false 我的 php 文件以 utf 8 编码
  • ML-Engine 预测出现错误,但本地预测工作正常

    我在这里搜索了很多 但不幸的是找不到答案 我在跑步TensorFlow 1 3 在 MacOS 上通过 PiP 安装 在我的本地计算机上 并使用provided ssd mobilenet v1 coco 检查站 我设法在本地和 ML En
  • WhatsApp Business API 未向手机发送 /message 端点或测试消息

    我已经设置了 WhatsApp Business 来测试他们用于发送消息的新 WhatsApp API 我已按照入门指南进行操作 但在尝试发送邮件时遇到了问题测试消息到我的手机 我测试了使用业务设置中的测试消息调用发送消息 如指南中所示 并
  • 一个变量有两种类型

    我需要从 TypeScript 读取一个 JSON 对象 它有一个变量名称prop两种类型中的哪一种Identifier or Expression到 C TypeScript 可以有一个具有多种类型的变量 具有联合类型功能 例如 prop
  • 如何忽略第一个小数点后的第一个值(如果它是 0),否则如果大于 0,则取它?

    我的值如下 decimal val 1 100 现在我想做的是 如果我在第一个小数点值后有 0 那么我只想取 1 1 并忽略其余部分 如果我有 1 11 那么我想取整个 1 11 这就是我的想法 将十进制转换为字符串 按点分割字符串 检查长
  • TOMCAT 6 SSL 错误:别名无法识别密钥条目

    我正在尝试在收到 CA 后配置密钥库 我收到了一份中级 CA 和一份 CA 我已使用此命令导入它们 keytool delete alias tomcat keystore B1i keystore keytool import alias
  • 接口与抽象类[重复]

    这个问题在这里已经有答案了 在C 中 什么时候应该使用接口 什么时候应该使用抽象类 什么可能是决定因素 更新 C 8 0 新功能 从 C 8 0 开始 接口可以定义成员的默认实现 包括属性 在接口中定义属性的默认实现很少见 因为接口可能不定