如何解决在旧 C# 版本中使用 ref struct 参数覆盖方法
我正在尝试覆盖 JsonConverter<T>
包中的 System.Text.Json
,该包具有抽象的 Read 方法,可以将其重写为:
public override object Read(ref Utf8JsonReader reader,Type typetoConvert,JsonSerializerOptions options)
此处 ref Utf8JsonReader
将 reader 标记为 ref 结构。 “ref struct”是 7.2 中引入的一个特性。 (如果您不熟悉,它是一个只能在堆栈上使用的结构体。MSDN Link)
在我的组织中,我们的一个项目运行在只能针对 C# 6 的旧编译器上。有没有办法在 C# 6 中编写 MSIL 或代码,以覆盖方法签名并实现上述的派生类签名?
否则您将看到以下错误: Struct 'System.Text.Json.Utf8JsonReader' 已过时:此版本不支持带有嵌入引用的类型
解决方法
不,您无法使用旧版本的 C# 正确实现基于引用结构的 API - [Obsolete]
被非常有意地使用以防止您这样做(尽管在其他一些类似的在这种情况下,“mod-req”已被用于类似的效果)。 ref struct
有非常具体的需求,如果不满足可能会导致严重的运行时问题(例如,早期的编译器可能会尝试装箱这样的结构,这将非常非常糟糕)。
简而言之:更新您的 C# 版本,或使用缺少您无法实现的 API 的旧版本库。作为第三种选择,您可以在更新版本的 C# 中创建自己的库,该库仅,以创建一个覆盖此 API 的抽象实现(也许只有 throw new NotSupportedException();
),然后从您的下层 C# 应用程序继承那个。但是,如果 Utf8JsonReader
API 现在是主要(我不知道,但可能是这种情况),那么这可能会导致整个事情没用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。