C# 中的值类型类定义?

2024-01-10

是否可以创建一个不是结构而是值类型的类,或者类似于值类型,因为它在传递时进行复制而不是通过引用传递。

edit:

抱歉,问题在提出后必须进行编辑。

另外,请参阅此问题以获取更多信息。在不存在的struct布局中循环 https://stackoverflow.com/questions/9296251/cycle-in-the-struct-layout-that-doesnt-exist


EDIT 2

现在看来,您正在寻找使用声明一个真正的值类型class关键字,根据定义这是不可能的。


由于您正在考虑创建一个语义类似于 System.String 的类,因此您可能应该反编译 System.String。它的许多魔力都隐藏在 CLR 中,但是您将看到的大部分内容都会有所帮助。

对于初学者来说,你肯定需要超载== and !=,并覆盖Equals() and GetHashCode()。您几乎肯定会想要实施IComparable<T> and IEquatable<T>以及。

字符串的另一个重要方面是它们不可变的。这是它们类似值的行为的重要组成部分,因为它保证两个相等的字符串始终相等。如果字符串是可变的,则可以修改其中一个字符串以使其与另一个字符串不相等。

我还应该指出,虽然字符串具有使其看起来像值类型的语义,它当然是一个引用类型,引用语义的某些方面是不可避免的。

如果您发布更多关于为什么要这样做的信息,我们可以提供更具体的建议。

EDIT

根据您的编辑,您似乎对字符串有误解。虽然它们在某些方面确实表现得像值类型,每次将它们传递给方法时,它们不会通过复制数据来直接传递。实现这一目标的唯一方法是声明一个struct。与所有类一样,字符串是只能通过引用访问的引用类型;您只能直接操作引用;你只能通过参考资料到一个方法。

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

C# 中的值类型类定义? 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何引用 Perl 子例程?

    我在弄清楚如何引用外部模块文件中的子例程时遇到了一些麻烦 现在 我正在这样做 外部文件 package settingsGeneral sub printScreen print 0 Main use settingsGeneral my
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 我应该使用什么协议来进行快速命令/响应交互?

    我需要建立一个用于快速命令 响应交互的协议 我的直觉告诉我只需将一个简单的协议与 CRLF 分隔的 ascii 字符串拼凑在一起 就像 SMTP 或 POP3 的工作方式一样 如果我需要保护它 则可以通过 SSH SSL 对其进行隧道传输
  • PHP 是否优化尾递归?

    我写了一小段代码 我相信如果尾递归被优化的话应该会成功 但是它炸毁了堆栈 我应该得出 PHP 没有优化尾递归的结论吗 function sumrand n sum if n 0 return sum else return sumrand
  • C#,后台工作者

    我有一个示例 WinForms 应用程序 它使用BackgroundWorker成分 它工作正常 但是当我点击Cancel按钮取消后台线程 但它不会取消线程 当我击中Cancel呼叫按钮 CancelAsync 方法 然后在RunWorke
  • Facebook 示例拼图:河内塔

    这是 Facebook 招聘样本测试中的一个问题 有 K 个钉子 当从桩的底部到顶部观察时 每个桩可以按半径递减的顺序容纳圆盘 有N个圆盘 半径为1到N 给定钉子的初始配置和钉子的最终配置 输出从初始配置转换到最终配置所需的移动 您需要以最
  • pandas 混合位置和标签索引,无需链接

    Since ix已经自 Pandas 0 20 起已弃用 http pandas docs github io pandas docs travis whatsnew html deprecate ix 我想知道在 Pandas 中混合基于
  • 是否可以调整嵌入的 .mov 的大小?

    我嵌入的 mov 剪辑有时比显示它的位置大 所以我想调整剪辑的大小 曾尝试过width and height但这只会改变显示它的区域 它不会调整实际电影的大小 可以调整影片大小吗 如果是 怎么办 是的 您需要scale属性 有 QuickT
  • 如何从aspx页面中抓取图像?

    我在尝试着scrape来自 aspx 页面的图像 我有这段代码 可以从普通网页中抓取图像 但无法抓取 aspx 页面 因为我需要将 http post 请求发送到 aspx 页面 即使在阅读了几个线程之后 我也不知道如何做到这一点是原来的代
  • 使用蓝牙 LE 在 iOS 和 Android 之间进行通信

    我有一个工作应用程序 使用 CoreBluetooth 在 iPad 中央 和 iPhone 外围 之间进行通信 我有一项服务有两个特点 我的 Nexus 7 运行最新的 Android 4 3 支持 BTLE Android 加入 BTL
  • 给定中序和后序遍历,如何输出树的前序遍历?

    给出当我在整数数组中具有先序和中序遍历时输出树的后序遍历的代码 如何使用给定的中序和后序数组来类似地获取前序 void postorder int preorder int prestart int inorder int inostart
  • 手势字符识别

    I use Dio dictionary function gesture on screen get text to search Library that in Android can make to be the function o
  • 如何使用 SI 符号格式化 noUiSlider 的刻度标签?

    这是我的 noUiSlider 的样子 我想将刻度标签格式设置为 1000 gt 1K 900000 gt 900K 5000000 gt 5M 等 即用适当的 SI 符号缩写数字 library shiny library shinyWi
  • function '<-'/2 undefined 接收块中出现错误 Elixir

    这是我的 Elixir 代码 defmodule ErlProcess do def receiver do receive do sayHello msg gt sender lt ok ok end end end 但它给出了这个错误
  • NVM无法在ubuntu 18.04上安装nodejs

    我尝试在 ubuntu 18 04 上使用 nvm 安装nodejs 但每次它都会抛出以下错误堆栈 pasindu pasindu HP EliteBook 850 G7 Notebook PC nvm install 0 10 35 Do
  • 关于端点接口的 jax-ws

    使用注释定义了 Java 接口 网络服务编译了代码 一切顺利 Example WebService public interface HelloWorldIfc 现在我尝试将端点接口定义为 WebService endpointInterf
  • 是否有一个简单的 Bugzilla/Trac 客户端供非软件人员使用?

    我知道这不完全是一个编程问题 但它直接影响我们的开发人员和我们分配编写的代码 如果有另一个类似的论坛可以更好地发布这个问题 请告诉我 我会从这里记下这个问题并将其发布到那里 我们的工作环境是几个开发人员为工厂生产车间创建 20 30 和维护
  • JavaFX 项目结构

    JavaFX 使用 FXML 的 MVC 模型听起来很棒 但我在找出如何组织我的项目包时遇到了困难 我发现的关于 JavaFX 的每一个教程都太简单且无组织 他们只是创建一个包并在那里创建所有内容 每个控制器 每个 fxml 每个 css
  • 如何在属性文件的数值中包含 _ ?

    我怎样才能拥有 下划线 在我的数值属性中 同时注入 ValueSpring中的注解 如果我包括 按照我的价值观 Spring 会抛出TypeMismatchException properties 文件 min score 20 000 j
  • 编译器:理解小程序生成的汇编代码

    我正在自学编译器是如何工作的 我正在通过阅读反汇编来学习GCC从小型 64 位 Linux 程序生成代码 我写了这个C程序 include
  • Rails 4 - 仅当当前密码正确时才允许更改密码

    在我的应用程序中 用户可以编辑他们的个人资料信息 在编辑个人资料表单上 用户可以更改所有字段 姓名 职务等 在同一个表单上有三个字段 current password password and password confirmation 我
  • C# 中的值类型类定义?

    是否可以创建一个不是结构而是值类型的类 或者类似于值类型 因为它在传递时进行复制而不是通过引用传递 edit 抱歉 问题在提出后必须进行编辑 另外 请参阅此问题以获取更多信息 在不存在的struct布局中循环 https stackover