如何从方法返回对对象的 const 引用? [复制]

2024-01-23

public Item getItem(ulong itemId)
{
    Item item = items[itemId]
    return item;
}

现在的问题是:被调用者getItem必须能够检索以下信息item持有;但不修改它。

抱歉,但我比 C# 更了解 C++...恐怕我必须回到 C++ 一小会儿,只是为了让自己清楚我要实现的目标...所以这就是我要做的在 C++ 中这种情况:

const Item& getItem(unsigned long itemId)
{
    const Item& item = items[itemId];
    return item;
}

很好 - 现在无论谁打电话getItem可能会调用吸气剂item,但不是设置者。

我需要在 C# 中实现类似的结果...可能吗?


您可以使用接口仅显示 getter,同时仍然支持实现该接口的类中的 setter。只要你归还界面,任何消费者都将仅限于接口定义的 getter。

public interface IItem {
    string SomeProperty { get; }
}

public class Item : IItem {
    public string SomeProperty { get; set; }
}

public class ItemHandler {
    private Item _item = new Item();

    public IItem getItem() {
        _item.SomeProperty = "A Value";
        return _item;
    }
}

class Program {
    static void Main(string[] args) {
        var itemHandler = new ItemHandler();
        var item = itemHandler.getItem();

        // You can read the property
        Console.WriteLine(item.SomeProperty);

        // You can't write to the property
        //item.SomeProperty = "A New Value";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从方法返回对对象的 const 引用? [复制] 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • NSLayoutAttributeLeft 与 NSLayoutAttributeLeading 之间的区别

    有什么区别NSLayoutAttributeLeft and NSLayoutAttributeLeading在iOS自动布局中 领导 并不总是意味着 左 对于 RTL 编写的语言 区域设置 对象对齐矩形的前缘将位于对象的右侧 引用自自动布
  • 项目点击监听器上的列表片段

    我正在尝试使用 OnItemClickListener 在 Android 的 ListFragment 上创建一个列表 但我不能 我单击了 n 个列表项 但没有任何反应 我是碎片新手 这是我的代码 谢谢你 public class MyF
  • 在Heroku 上运行delayed_job 工作线程?

    所以现在我有一个delayed job的实现 它可以在我的本地开发环境中完美运行 为了在我的机器上启动工作程序 我只需运行rake jobs work它工作得很好 为了让delayed job在heroku上工作 我一直在使用几乎相同的命令
  • 将 JSON 数据解析为 .NET 对象的最佳方法

    将 JSON 数据解析为 NET 对象的最佳方法是什么 我正在尝试帮助我的一位编码员朋友 他正在尝试使用 ASP net 将一些数据从 JSON 字符串转储到数据库中 是否有任何预构建的脚本可以实现这一点 预先感谢任何帮助 NET Fram
  • 如何修改我的用户 PROFILE 文件以将我创建的脚本文件夹附加到 PATH 变量的末尾? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何修改我的用户 PROFILE 文件以将我创建的脚本文件夹附加到 PATH 变量的末尾 我不太确定这意味着什么 谁能解释一下吗 在 un
  • 如何检查屏幕是否正在运行?

    如何在Python中检查屏幕是否具有给定的名称 例如 检查server1是否正在运行 谢谢 用于查找当前屏幕会话的内置命令是screen ls 要在 python 中获得相同的功能 from subprocess import check
  • HTML5 中的

    有几篇关于这个主题的文章 但我无法理解之间的相关区别
  • gridview 内的 CheckBox 选中状态

    我有一个简单的网格视图
  • 如何使用 RxJS 在 Angular 6 中发出一系列 http 请求

    我一直在网上寻找解决方案 但找不到任何适合我的用户案例的解决方案 我正在使用 MEAN 堆栈 Angular 6 并且我有一张注册表 我正在寻找一种方法来执行对 API 的多个 HTTP 调用 每个调用都依赖于前一个调用的返回结果 我需要看
  • 如何在 Angular4 中获取 FormControl 的值

    我对 Angular4 有一些经验 但我只是继承了一段使用 FormControls 的代码 我不知道如何使用它们 我正在设置一个注释文本区域 如果 isRegulatoryAuditRequired 的值等于 false 则需要该注释文本
  • jquery - 如何显示隐藏的div

    我的页面中嵌入了一个谷歌地图 其可见性设置为隐藏 我想使用按钮在页面上显示地图 应该使用jquery来完成 我的代码 不工作 div style height 350px border 1px solid 979797 div 任何人都可以
  • 在 C++ Microsoft Visual Studio 2010 中调试器多个环境变量

    在设置环境变量时 我在 Visual Studio 2010 Professional C 调试器中遇到了一个非常简单的问题 描述于 http msdn microsoft com en en library kcw4dzyf aspx h
  • 是否可以使用eclipse仅构建一次java项目并共享?

    是否有可能实际构建一个包含java代码的maven项目 构建一次并且二进制文件可以共享 问题 我尝试构建的项目大约需要 3 4 小时 并且需要高互联网带宽 我正在尝试检查在其他几台机器中重新使用这个构建项目的可能性 我之前曾处理过涉及 ma
  • 如何在 using 语句中使用对象初始值设定项?

    有没有什么方法可以重构此代码 以便不必使用临时变量 而仍然使用与对象初始值设定项关联的语法糖 FrmSomeForm someTempForm new FrmSomeForm SomePropA A SomePropB B SomeProp
  • Go 闭包变量作用域

    我正在阅读 CreateSpace Go 2012 编程简介 在第 86 页我发现了这个邪恶的魔法 func makeEvenGenerator func uint i uint 0 return func ret uint ret i i
  • TypeScript - 将动态属性名称传递给子级

    我正在开发一个带有嵌套路由的路由库 我试图定义一个推断父路径的子处理函数 原因是我有另一种类型 可以从字符串推断动态路径参数 例如 users id to id string 因此 我希望能够将推断的路径参数从父路由传递到每个子路由处理函数
  • 使用 Jasmine 在 Angular 5 中进行单元测试模型绑定

    我正在尝试编写一个单元测试来测试从组件方法调用返回的 JSON 数据是否成功绑定到打字稿模型 我的模型如下所示 export interface IPlayerAccount playerId number name string phon
  • 如何从 TFS 源代码管理中排除特定文件

    我们有多个配置文件 app DEV config app TEST config 等 和一个将正确的配置文件复制到 app config 的预构建事件 显然 配置特定文件位于源代码管理中 但目前 App Config 也是如此 但不应该如此
  • 从后台工作程序中的循环更新文本框

    我知道这个问题有人问过 至少从我到目前为止在这里发现的情况来看 但我无法真正理解它 已经尝试过 msdn 的示例 但仍然没有成功 这是我想要做的 我有一个连接到 TLL 标尺的 USB 计数器 我想在循环中不断读取值并将读数写入文本框而不阻
  • 如何从方法返回对对象的 const 引用? [复制]

    这个问题在这里已经有答案了 public Item getItem ulong itemId Item item items itemId return item 现在的问题是 被调用者getItem必须能够检索以下信息item持有 但不修