如何从方法返回对象的const引用?

时间:2018-05-24 17:22:44

标签: c# const return-value

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#中实现类似的结果......是否可能?

1 个答案:

答案 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";
    }
}