Joa*_*nge 8 .net c# performance immutability
我喜欢不变性概念,但有时我想知道,当一个应用程序不是平行的时候,应该避免让事情变得不可变吗?
当应用程序不是多线程的时,您不会受到共享状态问题的困扰,对吧?
或者不变性是像OOP这样的概念,你要么一直使用?排除基于使用/性能等因素不应该不可变的情况.
在为自己编写应用程序时,我遇到了这个问题,这个问题是适度的(可能像1-2k行).
我喜欢不可变性的优势,你只需要在创建对象时验证它一次.实际上这是一个巨大的奖金.
我喜欢不变性,因为这意味着我不必相信其他人的代码,不要乱用我希望保持不变的对象.
当您将一个对象传递给另一个组件(如a)时List<T>,您将受到该组件所做的那样的支配.将集合作为属性返回时,这一点尤其重要.
public class Foo {
private List<Bar> _barList;
public ICollection<Bar> BarList { get return _barList; }
}
Run Code Online (Sandbox Code Playgroud)
没有什么可以阻止这个类的消费者清除我下面的集合.即使将返回类型切换到IEnumerable<Bar>也不完全安全.没有什么可以阻止某些编写错误的代码将其转换回List<T>并调用.Clear().
但是,如果我真的希望该集合保持一致,我可以将其重写为followis
public class Foo {
private ImmutableCollection<Bar> _barList;
public ImmutableCollection<Bar> BarList { get { return _barList; } }
}
Run Code Online (Sandbox Code Playgroud)
现在我不必相信其他代码错误地使用我的类.他们不能弄乱它.