草庐IT

可变性

全部标签

c# - 如何使结构不可变?

在StackOverflow和互联网上,我发现保持结构不可变是一个很好的设计原则。不幸的是,我从未见过任何实际导致这些结构真正不可变的实现。假设一个结构内部没有任何引用类型,我该如何真正使结构不可变?也就是说,我如何防止其任何原始字段发生突变(可能通过编译时/运行时异常)?我写了一个简单的测试,试图使结构不可变,但即使使用System.ComponentModel.ImmutableObjectAttribute也不起作用:classProgram{staticvoidMain(string[]args){ImmutableStructimmStruct1=newImmutableSt

c# - .NET 枚举类型实际上是可变值类型吗?

仔细观察枚举类型的字段,我惊讶地发现保存枚举特定实例实际值的“支持”实例字段不是private,正如我所想的,但是public.它不是readonly任何一个。(IsPublic真,IsInitOnly假。)许多人认为.NET类型系统中的“可变”值类型是“邪恶的”,那么为什么枚举类型(例如从C#代码创建的)就是这样?现在,事实证明,C#编译器有某种魔法可以否认公共(public)实例字段的存在(但见下文),但在例如PowerShell你可以这样做:prompt>$d=[DayOfWeek]::Thursdayprompt>$dThursdayprompt>$d.value__=6pro

c# - 由于字符串是不可变的,具有相同字符串值的变量是否指向同一个字符串对象?

一)strings="value";strings1="value";s和s1引用变量是否指向同一个字符串对象(我假设这是因为字符串是不可变的)?b)我意识到相等运算符(==、>等)已被重新定义以比较字符串对象的值,但在使用静态方法Object.Equals()和Object.ReferenceEquals()比较两个字符串时也是如此?谢谢 最佳答案 不,并非所有具有相同值的字符串都是相同的对象引用。编译器生成的字符串都将是Interned并且是相同的引用。运行时生成的字符串在默认情况下不会被保留,并且会是不同的引用。vars1="

c# - 我如何确定一个类在 C# 中是否不可变?

如何确定C#中的类是否不可变? 最佳答案 有ImmutableObjectAttribute,但很少使用且支持不佳-当然也没有强制执行(您可以使用[ImmutableObject(true)]标记可变对象。据我所知,这唯一影响的是IDE处理属性的方式(即显示/不显示命名的属性选项)。实际上,您必须检查FieldInfo.IsInitOnly,但这仅适用于真正100%不可变的类型(假设没有反射滥用等);它无助于冰棒的不变性,也无助于在实践中不可变的事物,但在它们的实现中则无济于事;也就是说,它们不能公开可变,但理论上该对象支持它。这里

javascript - CSS可变宽度元素填充空间

在表单中,我希望输入:文本在表单标签左右对齐后填充剩余空间。标签有很多字符,所以我无法在标签上设置固定宽度。代码示例:UserInfoFirstName:LastName:CompletedEmailAddress:如何设置输入样式以填充文本后的剩余空间。谢谢。 最佳答案 .grid{width:100%;display:table;table-layout:auto;}.row{display:table-row;}label.cell{white-space:nowrap;display:table-cell;}span.cel

javascript - 如何将 jQuery 的 .css() 与可变属性名称一起使用?

而不是写:$('div').css({'backgroundColor':'red'});我想写这样的东西:$('div').css({get_property_name():'red'});哪里get_property_name()将返回"backgroundColor","color","border-top-color",或任何其他属性(property)。我有什么选择才能让它发挥作用? 最佳答案 The.css()method也可以称为.css(propertyName,value)。$('div').css(get_pro

javascript - 两个不可变列表——如何使三重相等起作用?

假设我们有一个使用Facebook的伟大Immutable.js创建的不可变对象(immutable对象).我想比较使用.map或.filter从单一来源生成的两个列表,并确保它们相等。在我看来,当您使用map/filter时,您正在创建一个与先前对象无关的新对象。如何使三重相等===起作用?这有什么意义吗?varlist=Immutable.List([1,2,3]);varlist1=list.map(function(item){returnitem;})varlist2=list.map(function(item){returnitem;})console.log("LIST

javascript - 使用可变纸张在 Raphael 中操纵 Canvas 背景颜色

我想将背景颜色设置为特定颜色。我使用以下代码://JavaScriptCodevarpaper=Raphael(200,350,320,200);paper.attr("fill","#f00");不知何故,这段代码不起作用。请帮忙,如何设置纸张的背景颜色? 最佳答案 实际上,完全可以为SVGCanvas设置背景颜色——这里需要注意的是,虽然Raphael控制Canvas内的所有元素,但它直接对Canvas本身提供的风格控制非常少。幸运的是,您可以通过canvas属性访问与Raphael纸对象关联的dom节点。这使得做这样的事情变得

javascript - 具有可变样式的angular2动画

使用Typescript和Angular2.0.0-rc.4如何从模板中指定样式属性值以便我可以重复使用按钮?例如,如果我想根据模板绑定(bind)的某些属性为每个按钮指定不同的背景颜色。见下文假设有以下组件:import{Component,OnInit,OnDestroy,Input,style,state,animate,transition,trigger}from'@angular/core';@Component({selector:'my-toggle-button',template:`{{bgColor}}`,animations:[trigger('state',[

Javascript:转发采用可变数量参数的函数调用

这个问题在这里已经有了答案:Passingargumentsforwardtoanotherjavascriptfunction(5个答案)关闭5年前。我想我需要像ruby​​的splat*这样的东西。functionfoo(){varresult='';for(vari=0;i我希望它返回"123",但我得到的是"[objectArguments]"。我想这是有道理的。它传递的是表示参数的对象,而不是单独的参数。那么我如何简单地将任意数量的参数转发给另一个接受任意数量参数的函数呢?