记录有共同的基类吗?

2023-12-14

在 .NET 类型系统中,所有引用类型都派生自System.Object,所有值类型来自System.ValueType我认为。是否也有一个共同的基类?record类型源自?如果没有,为什么不呢?


是否还有一个所有记录类型派生自的公共基类?

不,至少没有任何特定于记录的内容。记录只是参考类型。它们可以直接派生自System.Object或来自其他记录类型。

如果没有,为什么不呢?

它们不需要像值类型那样由运行时进行特殊处理。它们的所有特殊之处都在编译器为它们生成的代码中。


“根”记录

记录可以直接源自System.Object,无论是隐式的还是显式的,就像任何class能。记录类型的第一级引导记录的内部,建立记录类型层次结构的根。

  1. 复制构造函数-- 受保护的构造函数,接受对同一类型的引用并复制其属性。派生记录将从其复制构造函数中调用此函数。

  2. 克隆方法——本质上就是这样ICloneable<T>.Clone() would它曾经是基类库的一部分,但它有一个无法寻址的名称:<Clone>$。当您使用with关键字,它调用<Clone>$,它使用复制构造函数创建一个新实例,然后编译器允许在初始化表达式中设置任何仅限 init 的属性。

  3. 平等会员——这是一件大事,因为记录是关于值语义. The GetHashCode and Equals方法来自System.Object被覆盖,并且IEquatable<T>.Equals()已实施。还有一个名为的受保护属性EqualityContract用于相等性比较,通过仅比较公共部分来确保不同类型的记录不被视为相等。这== and !=运算符也超载。

  4. ToString method-- 重载以显示记录的成员。它使用受保护的PrintMembers方法,它调用类层次结构来构建包含所有属性值的字符串。

  5. Deconstruct method-- 使记录能够被解构为单独的变量。


派生记录

当您指定基本类型(除了System.Object)对于记录类型,它必须是另一种记录类型,因为它需要由记录类型层次结构的根建立的机制。派生记录类型定义相同的成员,但已标记的成员virtual现在已标记override.

  1. 复制构造函数-- 这将调用基本记录的复制构造函数。

  2. 克隆方法 -- <Clone>$被重写以使用其复制构造函数返回更派生的类型。

有趣的事实: This does not使用新的协变返回功能declare重写方法上的更派生的返回类型,即使它返回更派生的类型。这是因为 1) 它不需要,2) 它会使记录不可用(除了在 .NET 5.0 中),因为对该功能的支持是在 .NET 5.0 运行时中添加的。

  1. 平等会员-- 覆盖相同的方法并定义运算符,但考虑相等的任何新属性。

  2. ToString method -- ToString and PrintMembers被覆盖。ToString生成字符串中的实际类名和大括号。不调用基本实现。PrintMembers单独构建属性名称和值。

  3. Deconstruct method-- 这里没有重写,因为基类的方法没有标记virtual。如果引入新属性,则签名与基类的签名不同,因此无需覆盖任何内容。如果没有引入新的属性,则该方法被标记new来跟踪基类中的那个。


这就是为什么不需要特殊的记录基类型。


特别提示:

当记录被标记时sealed,通常是的成员protected virtual(但不是protected override) 变得private。它的范围有多大取决于它是否源自System.Object或其他记录类型。

以上都没有考虑通过提供您自己的编译器通常实现的任何方法的实现来进行自定义。

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

记录有共同的基类吗? 的相关文章

  • 检查空参数的最佳方法(保护子句)

    例如 您通常不希望构造函数中的参数为空 因此看到类似的内容是很正常的 if someArg null throw new ArgumentNullException nameof someArg if otherArg null throw
  • Unity3D StartCoroutine 调用一个函数,该函数什么时候返回?

    我知道Unity3D StartCoroutine调用了一个与StartCoroutine在同一线程上运行的函数 但是被调用的函数什么时候返回到原始调用者 我在互联网上查找了一个很好的 Unity3D Coroutine 示例 但找不到完整
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • C 中的变量定义是什么意思[重复]

    这个问题在这里已经有答案了 你们能告诉我 这在 C 中意味着什么吗 define Privileged Data Privileged Data static int dVariable 编译器对变量进行寻址有特殊意义吗 这只是一个宏Pri
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D

随机推荐

  • 在 android 中隐藏 Tablayout Bar

    我有一个活动toolbar Tablayout viewpager有碎片 像那样 I want to implement toolbar material search on all the fragments like that 但问题是
  • Android Studio 突然无法解析符号

    Android Studio 0 4 2 工作正常 今天我打开它 几乎所有内容都是红色的 并且自动完成功能已停止工作 我查看了导入 AS 似乎告诉我它找不到android support v4突然之间 为我提供了删除未使用的导入的选项 an
  • Java - 使用不带 lambda 表达式的谓词

    我有以下要求 员工 java public boolean isAdult Integer age if age gt 18 return true return false 谓词 java private Integer age Pred
  • 如何将 jQuery 插件功能限制为仅某些元素?

    我查看了 jQuery 插件网站 它教我如何编写基本插件 function fn maxHeight function var max 0 this each function max Math max max this height re
  • 合并多个精灵节点?

    例如 假设我有 2 个精灵节点 但也可以超过 2 个 如下所示 每个人都有自己独立的图像我想要的是将它们组合起来并用单个图像创建一个新的精灵节点 在工具模式下 like this 也许可以通过使用Image 毫无疑问涉及计算 或者也许使用一
  • 如何使用Python高效地在另一个字符串列表中搜索字符串列表?

    我有两个名称 字符串 列表 如下所示 executives Brian Olsavsky Some Guy Some Lady analysts Justin Post Some Dude Some Chick 我需要找到这些名称出现在如下
  • 当我使用 MKL 时,为什么 Tensorflow 会发出有关 AVX2 的警告?

    我正在使用具有 MKL 支持的 Tensorflow Anaconda 发行版 from tensorflow python framework import test util test util IsMklEnabled 这段代码打印T
  • 如何暂停和恢复 javascript 计时器 [重复]

    这个问题在这里已经有答案了 我有一个工作正常的计时器 但我需要能够暂停并在那之后恢复它 如果有人能帮助我 我将不胜感激
  • getUserMedia 在 Android Chrome 上冻结在第一帧

    我在桌面浏览器上有一个支持 getUserMedia Api 的工作代码 我可以在 div 中正确地看到网络摄像头的视频预览videoPreview 然而 当在 Android 设备上运行时 当我接受在 Chrome 浏览器中共享照片时 相
  • 在 JavaScript 中使用 JSON 将数组存储在 localStorage 中

    我已经参考了这个问题并为我工作 so q1 现在的问题是我使用 JSON stringify 和 JSON parse 将数组存储在 localStorage 中 但是 当我再次运行代码并尝试在 localStorage 上使用 JSON
  • JSF 2:未为错误页面呈现 Facelets 组合(模板)

    我在 Java EE 6 应用程序服务器 GlassFish v3 中使用 JSF 2 0 和 Facelets 我在 web xml 中配置了一个异常错误页面
  • Javascript Fullcalendar - 复制事件

    我在我的项目中使用 Fullcalendar http arshaw com fullcalendar 它通过 json 源获取事件 我想为用户提供将日历上的一个事件复制到另一天的选项 并且我想使用拖动来实现这一点 嗯 这是客户的要求 但拖
  • gmaps4rails 单标记自动缩放

    我正在尝试遵循答案here当地图上显示单个标记时缩小一点 默认情况下 我已经尝试了下面的代码 并生成了工作地图 但是更改 setZoom 没有效果 另外 我从 firebug 收到以下错误 下面的代码
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect
  • 我如何知道 `git gc --auto` 是否做了什么?

    我在跑git gc auto作为自动保存脚本的一部分 我想进行进一步的清理 如果git gc auto已经做了一些事情 但我想避免麻烦 如果git gc auto感觉不需要做某事 有没有办法检查返回值git gc auto 或者事先检查是否
  • 如何将wav文件中的数据读取到数组

    我需要将 wav 文件的所有样本放入一个数组 或者两个 如果您需要这样做以保持立体声 以便我可以对它们进行一些修改 我想知道这是否容易完成 最好没有外部库 我没有阅读声音文件的经验 所以我对这个主题了解不多 这段代码应该可以解决问题 它将波
  • 未通过 Smart Lock API 在应用程序中检索到关联网站的密码

    I ve 关联我的 https 网站和应用程序以共享存储的凭据并收到了该协会已上线的确认信息 但是当我致电CredentialsApi request 方法在我的应用程序中 我无法从我的网站检索使用 Chrome 密码管理器保存的任何凭据
  • 处理我的 Android 应用程序中的文本视图链接单击

    我目前正在 TextView 中渲染 HTML 输入 如下所示 tv setText Html fromHtml a href test test a 显示的 HTML 是通过外部资源提供给我的 因此我无法随意更改内容 但我当然可以对 HT
  • 片段中的函数使模拟器崩溃

    当我将函数放入其中时发生错误onCreateView in menu1 Fragment java 提前抱歉 因为我也会放置我的日志 所以这可能会使我的帖子有点大 所以我会告诉你布局 我是新来的 很抱歉有很多问题 如果我不添加该函数 代码就
  • 记录有共同的基类吗?

    在 NET 类型系统中 所有引用类型都派生自System Object 所有值类型来自System ValueType我认为 是否也有一个共同的基类 record类型源自 如果没有 为什么不呢 是否还有一个所有记录类型派生自的公共基类 不