|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一般的指的.net就是跟net网页编程相对的那种,主要是做企业级应用的。你如果想学这个,主要就是学C#和数据库。(ASP.NET好像很重要的,应该也要学的,ASP.NET上好像可以结合VB和C#等多种语言,但是微软主推C#)微软基本类库(BaseClassLibrary)团队已完成了.NET不成变汇合的正式版本,但不包含ImmutableArray。与其一同公布的还包含针对别的不成变对象范例的计划指南。
假如你必要在多个线程中平安地共享汇合,而且同意每一个线程在必要时对其内容举行改动。这类场景就是不成变汇合所计划的初志。只读汇合在利用时必要复制汇合中的全体内容,而新的不成变汇合能够以一种更高功能的体例从一个现有汇合中举行创立。
利用不成变汇合必要出格小心,由于你很简单毛病地写成“list.Add(item)”,而准确的办法是“list=list.Add(item)”。乃至编译器也大概发生相似的毛病,这也是为何不成变汇合不撑持机关函数的缘故原由。思索以下代码:
list=newImmutableList<int>{1,2,3};
在编译后会发生以下代码:
temp=newImmutableList();temp.Add(1);temp.Add(2)temp.Add(3)list=temp;
因为3次Add办法的了局都被抛弃,终极全部汇合包括的项数量为0,而不是希冀中的3。
不成变对象指南ImmoLendwerth倡议,当你在创立本人的不成变对象时,在个中到场得当的WithXxx办法。对复杂的对象来讲,为每个属性创立一个WithXxx办法便可。当属性值必要变更时,该办法会前往以后对象的一个拷贝。
假如某属性代表了一个分离,那末这类形式就必要一点变更。以下这段代码来自Immo的公布声明:
classOrder
{
publicOrder(IEnumerable<OrderLine>lines)
{
Lines=lines.ToImmutableList();
}
publicImmutableList<OrderLine>Lines{get;privateset;}
publicOrderWithLines(IEnumerableOrderLine>value)
{
returnObject.ReferenceEquals(Lines,value)
?this
:newOrder(value);
}
}
如你所见,WithLines办法可承受恣意IEnumerable。因而你能够传送一个新创立的ImmutableList对象,大概是某个LINQ表达式的了局。这类体例已足以满意需求了,不外他还倡议供应某些帮助办法:
classOrder
{
//...
publicOrderAddLine(OrderLinevalue)
{
returnWithLines(Lines.Add(value));
}
publicOrderRemoveLine(OrderLinevalue)
{
returnWithLines(Lines.Remove(value));
}
publicOrderReplaceLine(OrderLineoldValue,OrderLinenewValue)
{
returnoldValue==newValue
?this
:WithLines(Lines.Replace(oldValue,newValue));
}
}
ImmutableArray被移除
因为功能方面的缘故原由,ImmutableArray从终极的公布版本中被移除。其缘故原由是:为了满意内存功能目标,ImmutableArray必需计划成一个值对象,而且为了坚持值对象的语义,ImmutableArray的默许实例必需体现为一个空数组情势。不幸的是,为了到达这一点,对空值的检测(nullcheck)会使得C#没法移除对数组界限的检测,而这一点是为到达优秀CPU功能的一个主要思索事项。
因为ImmutableArray类关于Roslyn编译器项目十分主要,计划者曾思索删除会招致功能成绩的空值检测功效,但又因而发生了别的的成绩,Immo如许写道:
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。 |
|