草庐IT

易变性

全部标签

c# - C#中的字符串不变性

我很好奇StringBuilder类是如何在内部实现的,所以我决定查看Mono的源代码并将其与Reflector的Microsoft实现的反汇编代码进行比较。本质上,微软的实现使用char[]在内部存储一个字符串表示,以及一堆不安全的方法来操作它。这很简单,并没有提出任何问题。但是我很困惑,当我发现Mono在StringBuilder中使用了一个字符串时:privateint_length;privatestring_str;第一个想法是:“多么愚蠢的StringBuilder”。但后来我发现可以使用指针来改变字符串:publicStringBuilderAppend(stringva

c# - 与 C# 相比,F# 的内置不变性有哪些优势?

我听说F#原生支持不可变性,但C#无法复制它呢?从C#不可变数据中得不到的F#不可变数据会得到什么?同样在F#中,没有办法创建可变数据吗?一切都是不可变的吗?如果您在应用程序中同时使用C#和F#,是否可以在C#中更改不可变的F#数据?或者您是否只需要创建新的C#类型来使用不可变的F#数据并替换指向这些数据的引用? 最佳答案 F#的工作方式使得处理不可变数据变得更加容易,但在这方面,没有什么特别之处是C#无法完成的。不过,它可能无法提供简洁的语法。F#通过mutable关键字支持可变数据。F#不是纯函数式语言。它支持循环等命令式结构以

c# - 结构的不变性

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyaremutablestructsevil?我在包括此处在内的很多地方都读到过,最好将结构设置为不可变。这背后的原因是什么?我看到许多Microsoft创建的可变结构,例如xna中的结构。BCL中可能还有更多。不遵循此指南的利弊是什么?

c# - 不变性和 XML 序列化

我有几个类,一旦设置了初始值,它们就是不可变的。EricLippert称之为write-onceimmutability.在C#中实现一次写入不变性通常意味着通过构造函数设置初始值。这些值初始化只读字段。但是如果您需要使用XmlSerializer或DataContractSerializer将这样的类序列化为XML,则必须具有无参数构造函数。有人对如何解决这个问题有建议吗?是否有其他形式的不变性更适合序列化?编辑:正如@Todd所指出的,DataContractSerializer不需要无参数构造函数。根据DataContractSerializerdocumentationonMS

C#、不变性和公共(public)只读字段

我在很多地方都读到公开字段不是一个好主意,因为如果您以后想要更改属性,您将不得不重新编译所有使用您的类的代码。但是,在不可变类的情况下,我不明白为什么您需要更改属性-毕竟您不会向“集合”添加逻辑。对此有什么想法,我是否遗漏了什么?区别的例子,对于那些比文本更容易阅读代码的人:)//ImmutableTupleusingpublicreadonlyfieldspublicclassTuple{publicreadonlyT1Item1;publicreadonlyT2Item2;publicTuple(T1item1,T2item2){Item1=item1;Item2=item2;}}

C# 和不可变性和只读字段……谎言?

我发现人们声称在一个类中使用所有只读字段并不一定会使该类的实例不可变,因为即使在初始化(构造)之后也有更改只读字段值的“方法”。如何?有什么方法?所以我的问题是什么时候我们才能在C#中真正拥有一个“真正的”不可变对象(immutable对象),我可以在线程中安全地使用它?匿名类型也会创建不可变对象(immutable对象)吗?有人说LINQ在内部使用不可变对象(immutable对象)。究竟如何? 最佳答案 您在其中问了大约五个问题。我会回答第一个:Havingallreadonlyfieldsinaclassdoesnotnece

javascript - 数组的不变性更新助手中的动态键

https://facebook.github.io/react/docs/update.html我有一个更新函数,它接收一个索引和事件,以便更改数组中该特定项目的值。我如何获得index在这种情况下被评估而不是被视为设置键?有可能吗?updateValue:function(index,e){varitems=React.addons.update(this.state.items,{index:{amount:{$set:e.target.value}}});this.setState({items:items})}现在这显然不起作用,因为它正在尝试更新this.state.ite

string - 字符串的不变性和并发性

我们应该同步写入字符串吗?由于字符串是不可变的,我们永远不会在2个不同线程的写入和读取之间出现不一致的状态,对吗?换句话说,为什么我们没有atomic对于字符串类型? 最佳答案 string值是不可变的,但变量不是。变量是——顾名思义——变量,它们的值可以改变。访问string值不需要同步,它不能改变。如果将string值传递给您,该值(string的内容)将始终保持不变(包unsafe的使用不会计数)。当你想从多个goroutines中同时访问一个string类型的变量时,你需要同步,如果至少有一个访问是写(一个改变值的写)字符串

c++ - 引入旋转/缩放不变性后,OpenCV Orb 找不到匹配项

我正在开发一个使用OpenCV2.3.1中的Orb特征检测器的项目。我在8个不同的图像之间找到匹配项,其中6个非常相似(相机位置相差20厘米,沿着线性slider,因此没有比例或旋转变化),然后是从大约45度角拍摄的2个图像边。我的代码在非常相似的图像之间找到了大量准确的匹配,但从更不同的角度拍摄的图像几乎没有。我已经包含了我认为是我的代码的相关部分,如果您需要更多信息,请告诉我。//setparametersintnumKeyPoints=1500;floatdistThreshold=15.0;//instantiatedetector,extractor,matcherdetec

python - 检查 Python 中的可变性?

考虑一下code:a={...}#aisandictwitharbitrarycontentsb=a.copy()可变性在字典的键和值中起什么作用?如何确保一个字典的键或值的更改不会反射(reflect)在另一个字典中?这与可散列的constraint有何关系?dict键?Python2.x和Python3.x之间的行为有什么不同吗?如何检查Python中的类型是否可变? 最佳答案 1)键不能是可变的,除非您有一个用户定义的可散列但也可变的类。这就是强加给你的一切。但是,使用可散列、可变对象作为dict键可能不是一个好主意。2)通过