C# 9.0 记录 - ToString 不继承

2024-01-05

考虑:

// the ratioale for Wrapper is that it has a Json serializer that  
// serialize through Field (not included in this example)
record Wrapper<T> where T : notnull {
  protected Wrapper(T field) => Field = field; 
  protected Wrapper(Wrapper<T> wrapper) => Field = wrapper.Field;
  protected readonly T Field;
  public override string ToString() => Field.ToString() ?? "";
}

record MyRec : Wrapper<string> {
    public MyRec(string s) : base(s) {}
}

public static class Program {
  public static void Main(string[] args) {
      var r = new MyRec("hello");
      Console.WriteLine(r.ToString());
  }
}

sharplab https://sharplab.io/#v2:EYLgtghgzgLgpgJwD4AEBMBGAsAKFwOwjDigAcIBjOAAhQwDoAlAV3xgEtj6BhAezFLsANogDKiAG7sqUXAG9c1JbQDMtNNQCSUAKIAPeAkJDN+djDkBfXNbx2A9PeowAFuyjUX0ahGpk4FOwQQn6IwuwAXojOXjChCEFCkTSuCLzMAOYu1ABi7HBCACa4jtQAFPi8cez4FELMhXCF1DUx7tRwekSkIgCUuAgBvAjNAOoIEKSkiAA8ACoAfNQA7i6INHPUINSVMPjMQiEKOEqkafAU8GMTU4hlmwBm+UW91AC8S3kFzW/UT98AbmoimoZyqASu1HGk2mCDK0NuCHmS2WN1hrw+uWePxWaMQ9C+RQBILBF0hgwghV4+CEAE9qJtCYViSdVNReBJEAlGrQMAAGBm8UQwBL4DJlDGfbH0OZCkU1cWvAD8SuoACI1SzbAMhiNqABZWmMAJbKF4pF0PlLY7KNmG40UMqWvyvbbAaBwMpQV5WGy4XDoNQ2tl0ABstAALAaIDUnfyANoAXR8CAy3uowdtEggCGoud++DgywNRoCZTVa0OvDVvRZtqUdAAnGUEDK5aLFbWQbZtXYgA==

看起来像基地ToString不是继承的,编译器仍然自动生成派生的Tostring

这是为什么 ?有什么好的办法吗?


有一条评论为我解决了这个问题。肖恩说如果你添加sealed该方法阻止编译器合成ToString方法见下:

public sealed override string ToString() => Value;

请注意,密封覆盖的能力ToString was 在 C# 10 中引入。 https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#record-types-can-seal-tostring

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

C# 9.0 记录 - ToString 不继承 的相关文章

随机推荐

  • Android Things:连接到 Raspberry Pi 3

    完全新手 我有一个树莓派并已将安卓事物磁盘映像并启动它 但我无法从Windows10台电脑运行安卓工作室 adb exe通过以太网还是USB 这Pi屏幕上有一个绿色和灰色的 androidthings 标志 但上面写着 未连接 如果我连接
  • 将布局从 networkx 传输到 cytoscape

    我想使用 networkx 生成图形的布局 是否可以将此布局转移到细胞景观 http www cytoscape org 并把它画在那里 我试图简单地写一个图表 import networkx as nx G nx Graph G add
  • 设置 WSO2 EMM

    我正在尝试设置 WSO2 EMM V2 0 1 我能够在我的实时服务器上进行设置并遵循此处提供的所有说明WSO2 入门 https docs wso2 com display EMM201 Getting Started直到我到达配置And
  • PHP读取txt文件并检查用户名密码是否存在

    我有一堆密码和用户名存储在一个 txt 文件中 我需要检查是否匹配 我知道这不是一个安全的方法 但它是为了学习的目的 此代码将用户名和密码写入 txt 文件 if isset POST register user POST username
  • 碲与硒:比较

    我使用硒有一段时间并且做得很好 我想尝试一下碲 搜索并发现只有很少的问题 我想了解以下内容 使用碲的主要优点是什么 Selenium Groovy 有什么不同 Tellurium 是 Selenium 的 DSL 领域特定语言 它是为了让
  • 如何将 javascript 设置样式属性返回到 CSS 默认值

    我正在尝试弄清楚如何在使用 javascript 更改样式属性后恢复为样式表中的值 包括单位 在下面的示例中 我希望输出为100px CSS 中的值 而不是10px as getComputedStyle gives 我还将虚拟 div 保
  • Linux 上的 Emacs/xterm 颜色烦恼

    我在本地 Linux 机器和远程集群的登录节点上的控制台窗口中使用 emacs 我经常使用 emacs 并且在 emacs 文件中将前景色设置为白色 如下所示 set foreground color white set backgroun
  • AppCompatDelegate 无法实例化自定义视图充气器 android.support.v7.app.AppCompatViewInflater

    当获取发布 apk 时 我在应用程序的所有活动中收到此错误日志 04 03 17 10 54 105 26527 26527 I AppCompatDelegate Failed to instantiate custom view inf
  • 不超过两个重复字母/数字的正则表达式

    我需要处理 XSL 文件中不超过两个相同字母 数字的正则表达式 no space 不支持特殊字符 支持 a z A Z 0 9 需要 a z 之一 需要 0 9 之一 不超过 2 个相同的字母 数字 即BBB将失败 BB被接受 到目前为止我
  • 是否可以在 WordPress 中测试空术语或类别?

    我有一个项目 要求我列出每个自定义帖子类型的可用术语 并通过 css javascript 直观地指示哪些术语 类别为空 有没有办法返回术语 类别列表并说向空的类别添加一个类 感谢您提供的所有帮助 就在这里 首先 您使用以下方式获取条款获取
  • 如何为 springdoc swagger-ui HTML 页面配置自定义 URL?

    将 springdoc openapi ui 依赖项添加到我的 Spring 项目 不是 Spring Boot 后 将生成 OpenAPI V3 文档 并且可以使用默认的 swagger ui 页面查看 localhost 8080 sw
  • 从 std::async 返回的 std::future 在超出范围时挂起

    我正在使用以下组合std async and std future from C 11 我用来对我在代码中执行的某个活动强制执行 time outmight我尝试连接到服务器时需要一些时间 代码如下 include
  • 当我在 PHP 中使用 session_regenerate_id(true) 时,session_destroy 会带来什么附加价值?

    我一直在阅读手册和网络上的各个页面 包括这里的很多问题 然而 我仍然无法理解这个概念session destroy 在 PHP 中与其他取消设置会话数据的方法结合使用 考虑这个网站从不注册会话变量之外的 SESSION超全局数组 sessi
  • 自动从 XML 模式创建 GUI

    我必须编写一个桌面应用程序来编辑 XML 文件中存储的数据 该格式由 XML 架构文件 xsd 定义 格式相当复杂 有没有可以自动生成基本GUI的工具 目前尚未决定使用哪种语言 我有使用 wxWidgets 的 Python 和 C 以及使
  • 为什么“npm run dev”不能在新的“npx create-next-app”上工作?

    我刚刚创建了一个新的 Next 应用程序npx create next app 看起来已经成功运行了 npx create next app 8 46 31 npx installed 1 in 8 826s What is your pr
  • 使用 LINQ 逐字读取文本文件

    我正在学习 LINQ 并且想使用 LINQ 逐字阅读文本文件 比如说电子书 这就是为什么我可以想出 static void Main string content File ReadAllLines text txt var query f
  • 处理 ASP.NET MVC 中的路由错误

    我知道如何设置自己的路由 但是如何处理路由表漏洞中的路由呢 我的意思是 我猜默认 controller action id 路线可能是一个通用的包罗万象的东西 但我不确定这是否是正确的方法 我喜欢让我的用户知道他们请求的数据 页面 不存在
  • 使用 JSONPath 过滤 JSON 文档中的属性

    我有一个任意定义的 JSON 文档 并且我希望能够应用JSONPath https goessner net articles JsonPath 类似于属性白名单过滤器的表达式 所有选定的节点和他们的祖先回到根节点保留 所有其他节点都被删除
  • MIPS 中的递归函数如何工作?

    我是 MIPS 的新手 因为我开始为大学学习 MIPS 汇编 并且在理解 MIPS 中的递归函数如何工作方面遇到了问题 例如 我有这个程序 用 C 语言 可以用 MIPS 编写 int fact int n if n lt 1 return
  • C# 9.0 记录 - ToString 不继承

    考虑 the ratioale for Wrapper is that it has a Json serializer that serialize through Field not included in this example r