【发布时间】:2018-05-24 17:22:43
【问题描述】:
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 上的 getter,但不能调用 setter。
我需要在 C# 中实现类似的结果...有可能吗?
【问题讨论】:
-
这取决于
Item是class还是struct。 -
虽然您可以一起破解某些东西,但 C# 通常不以这种方式使用。有什么阻止您更改
Item以使属性只读? -
-
@RonBeyer 或返回 Item 实现的接口,该接口仅公开 getter
-
为了完整性(以防万一还不清楚):C# 没有 C++ 的“const 正确性”的概念(就此而言,大多数其他语言也没有)。结构的不变性有一些支持,但由于不变性不是结构的目的(并且使用它们还有其他后果),这不是通常的方法。如果您的代码库确实需要阻止调用者做坏事,那么包装接口或类是可行的方法,正如其他人所提到的,但在许多情况下 C++ 将使用
const,C# 代码库将只是去“不要那样做,那么”。
标签: c# constants return-value