Jon*_*Jon 33 c# properties readonly
我发誓我已经看到了这个例子,但谷歌搜索了一下,找不到它.
我有一个类,它有一个对象的引用,需要有一个GET; 它的方法.我的问题是我不希望任何人能够摆弄它,即我希望他们得到它的只读版本(注意我需要能够在我的班级内改变它).
谢谢
Jon*_*eet 52
不,没有办法做到这一点.例如,如果您返回List<string>(并且它不是不可变的),则调用者将能够添加条目.
这种方法的正常方法是返回一个不可变的包装器,例如ReadOnlyCollection<T>.
对于其他可变类型,您可能需要在返回之前克隆该值.
请注意,只返回一个不可变的接口视图(例如返回IEnumerable<T>而不是List<T>)将不会阻止调用者返回到mutable类型并进行变异.
编辑:请注意,除了其他任何东西,这种关注是不可变类型使得更容易推理代码的原因之一:)
返回对精简接口的引用:
interface IFoo
string Bar { get; }
class ClassWithGet
public IFoo GetFoo(...);
Run Code Online (Sandbox Code Playgroud)