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#中实现类似的结果......是否可能?
答案 0 :(得分:3)
您可以使用接口来仅显示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";
}
}