【问题标题】:What is the need of readonly objects in c#? When shall we have our object as readonly in c#?c# 中只读对象的需求是什么?我们什么时候可以在 c# 中将我们的对象设为只读?
【发布时间】:2018-11-24 19:41:50
【问题描述】:

我知道字段是只读的,或者字段什么时候可以是只读的,但我无法理解为什么对象可以是只读的,或者我们什么时候可以在 C# 中将对象设为只读。 请帮助我理解这个概念。

【问题讨论】:

  • C# 中的“只读对象”对您来说是什么?我知道只读字段,就像你一样,但我不知道这样命名的“只读对象”的概念。你在谈论不变性吗?可以举个例子吗?
  • 移来回答
  • 你能举个例子来说明你所说的只读对象是什么意思吗?
  • readonly字段,即初始化后不能修改的字段。我猜你的 readonly 对象是指 immutable 对象,它(大致)指的是不改变其内部状态的对象。 (将其视为具有所有 readonly 字段或 get 仅属性的对象。)

标签: c# object readonly


【解决方案1】:

Readonly 对象被初始化为声明或构造函数的一部分。对象被设为只读的原因有很多,比如防止对象的初始值发生变化。

【讨论】:

  • 我觉得您描述了一个引用对象的只读字段。不过,不确定这是否是 OP 所说的,因为他明确取消了只读字段。
【解决方案2】:

通过使用一些魔法使对象不可变,使其成为“只读”。所以,你可以有类似的东西:

public interface IMyROClass
{
    string name { get; }
}

public class MyROClass : IMyROClass
{
    private string _name;
    public string name { get { return _name; } }
    public MyROClass(string name) { _name = name; }
}
public class MyClass
{ 
    private readonly MyROClass _myROClass; 
    public MyClass(MyROClass myROClass) { _myROClass = myROClass; } 
    public IMyROClass myROClass => _myROClass;
} 

【讨论】:

  • 您的接口声明无效。我确定这是一个属性,但正如声明的那样,它是一个在接口中无效的字段。
  • 谢谢,欣赏敏锐的眼睛。 :)
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 2020-03-05
  • 2013-02-08
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多