版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
namespaceAnamespaceisadomainwithinwhichtypenamesmustbeunique.namespacesaretypicallyorganizedintohierarchicalstructures.System.Security.Cryptography:System.Security.Cryptography.RSArsa=System.Security.Cryptography.RSA.Create();RSAisaclassinCryptographynestednamespacesnamespaceOuter{namespaceMiddle{namespaceInner{classClass1{}classClass2{}}}}namespaceOuter.Middle.Inner{classClass1{}classClass2{}}RulesWithinaNamespaceScoping:
Namesdeclaredinouternamespacescanbeusedunqualified(不受限制地)withininnernamespaces.namespaceOuter{namespaceMiddle{classClass1{}namespaceInner{classClass2:Class1{}}}}partiallyqualifiednamenamespaceMyTradingCompany{namespaceCommon{classReportBase{}}namespaceManagementReporting{classSalesReport:Common.ReportBase{}}}AliasingTypesandNamespacesusingPropertyInfo2=System.Reflection.PropertyInfo;classProgram{PropertyInfo2p;}usingR=System.Reflection;classProgram{R.PropertyInfop;}ClassinC#classFoo{}Precedingthekeywordclass,Attributesandclassmodifiers:modifiersarepublic,internal,abstract,sealed,static,unsafe,
andpartial.FollowingYourClassName,Generictypeparameters,abase
class,andinterfaces.WithinthebracesClassmembers(thesearemethods,properties,indexers,events,fields,constructors,operator
functions,nestedtypes,andafinalizer).名字空间底下的类没有private,protected等修饰,但类内部可以有。AccessModifierspublic,fullyaccessible.Thisistheimplicitaccessibilityformembersofanenumorinterface.internal,accessibleonlywithincontainingassembly(配件或程序集)orfriendassemblies.private,visibleonlywithincontainingtype.Thisisthedefaultaccessibilityformembersofaclassorstruct.protected,visibleonlywithincontainingtypeorsubclass.classClass1{}//Class1isinternal(default)publicclassClass2{}//accessiblefromoutsideitsassemblyaC#classFieldAfieldisavariablethatisamemberofaclass.classOctopus{stringname;
publicintAge=10;readonlyintlegs=8;}Aread-onlyfieldcanbeassignedonlyinitsdeclarationorwithintheenclosingtype’sconstructor.StaticandInstanceMembersstaticmembersasbelongingtoclasstypesandinstancemembersasbelongingtoobjects(instancesofclasstypes).MethodsAmethodperformsanactioninaseriesofstatements.OverloadingmethodspublicclassFly{voidFoo(intx);voidFoo(doublex);voidFoo(intx,floaty);voidFoo(floatx,inty);}InstanceConstructorspublicclassPanda{stringname;//DefinefieldpublicPanda(stringn)//Defineconstructor{name=n;//Initializationcode}}Pandap=newPanda("Petey");//CallconstructoroverloadconstructorspublicclassWine{publicWine(decimalprice){...}publicWine(decimalprice,intyear):this(price){...}}Oneoverloadmaycallanother,usingthethiskeyword.Implicitparameterlessconstructors(default)ObjectInitializersTosimplifyobjectinitialization,theaccessiblefieldsorpropertiesofanobjectcanbeinitializedinasinglestatementdirectlyafterconstruction.publicclassBunny{publicstringName;publicboolLikesCarrots,LikesHumans;publicBunny(){}publicBunny(stringn){Name=n;}}Bunnyb1=newBunny{Name="Bo",LikesCarrots=true,LikesHumans=false};ThethisReferenceThethisreferencereferstotheinstanceitself.publicclassTest{stringname;publicTest(stringname){=name;}}publicclassPanda{publicPandaMate;publicvoidMarry(Pandapartner){Mate=partner;partner.Mate=this;}}PropertiesPropertieslooklikefieldsfromtheoutside,butinternallytheycontainlogic,likemethodsdo.publicclassStock{decimalcurrentPrice;//Theprivate"backing"fieldpublicdecimalCurrentPrice//Thepublicproperty{get{returncurrentPrice;}set{currentPrice=value;}}}Themostcommonimplementationforapropertyisagetterand/orsetterthatsimplyreadsandwritestoaprivatefield
ofthesametypeasthepropertyAutomaticpropertiespublicclassStock{publicdecimalCurrentPrice{get;set;}}getandsetaccessibilitypublicclassStock{publicdecimalCurrentPrice{get;private
set;}}PublicclassExample{privatedecimalx;publicdecimalX{get{returnx;}private
set{x=Math.Round(value,2);}}}IndexersIndexersprovideanaturalsyntaxforaccessingelementsinaclassorstructthatencapsulatealistordictionaryofvalues.ConstantsAconstantisafieldwhosevaluecanneverchange.publicclassTest{publicconststringMessage="HelloWorld";}StaticConstructorsAstaticconstructorexecutesoncepertype,ratherthanonceperinstance.Atypecandefineonlyonestaticconstructor,anditmustbeparameterless.classTest{staticTest(){Console.Write("TypeInitialized");}}StaticClassesAclasscanbemarkedstatic,indicatingthatitmustbecomposedsolelyofstaticmembersandcannotbesubclassed.TheSystem.ConsoleandSystem.Mathclassesaregoodexamplesofstaticclasses.FinalizersordestructorsclassClass1{~Class1(){...}}PartialTypesandMethodsPartialtypesallowatypedefinitiontobesplit—typicallyacrossmultiplefiles.//PaymentFormGen.cs
partialclassPaymentForm{...}//PaymentForm.cs-hand-authoredpartialclassPaymentForm{...}partialclassPaymentForm//Inauto-generatedfile{partialvoidValidatePayment(decimalamount);}partialclassPaymentForm//Inhand-authoredfile{partialvoidValidatePayment(decimalamount){if(amount>100)Console.Write("Expensive!");}}InheritancepublicclassAsset{publicstringName;}publicclassStock:Asset//inheritsfromAsset{publiclongSharesOwned;}publicclassHouse:Asset//inheritsfromAsset{publicdecimalMortgage;}CastingandReferenceConversionsAnobjectreferencecanbe:ImplicitlyupcasttoabaseclassreferenceExplicitlydowncast
toasubclassreferenceupcastingStockmsft=newStock();//FrompreviousexampleAsseta=msft;//UpcastConsole.WriteLine(a==msft);//TrueConsole.WriteLine(a.Name);//OKConsole.WriteLine(a.SharesOwned);//Error,??upcastingisalsocalledcovariance.DowncastingAdowncastoperationcreatesasubclassreferencefromabaseclassreference.Stockmsft=newStock();Asseta=msft;//UpcastStocks=(Stock)a;//DowncastConsole.WriteLine(s.SharesOwned);//<Noerror>Console.WriteLine(s==a);//TrueConsole.WriteLine(s==msft);//Truedowncastingisalsocalledcontravariance.Househ=newHouse();Asseta=h;//UpcastalwayssucceedsStocks=(Stock)a;//Downcastfails:aisnotaStockas-operatorAsseta=newAsset();Stocks=aasStock;//sisnull;noexceptionthrownif(s!=null)Console.WriteLine(s.SharesOwned);Covariance&Contravariance
协变和抗变Covarianceandcontravarianceallowustobeflexiblewhendealingwithclasshierarchy.publicclassSmall{}publicclassBig:Small{}publicclassBigger:Big{}Smallsml1=newSmall();//okSmallsml2=newBig();//okSmallsml3=newBigger();//okBigbig1=newBigger();//okBigbig2=newSmall();//error!CovarianceCovarianceenablestopassaderivedtypewhereabasetypeisexpected.Covariancecanbeappliedondelegate,generic,array,interface,etc.CovariancewithdelegateTODOVirtualFunctionMemberspublicclassAsset{publicstringName;publicvirtualdecimalLiability{get{return0;}}}OverrideavirtualfunctionpublicclassHouse:Asset{publicdecimalMortgage;publicoverridedecimalLiability{get{returnMortgage;}}}AbstractClassesandAbstractMemberspublicabstractclassAsset{//NoteemptyimplementationpublicabstractdecimalNetValue{get;}}Aclassdeclaredasabstractcanneverbeinstantiated.Abstractmembersarelikevirtualmembers,excepttheydon’tprovideadefaultimplementation.Abstractmemberscanonlybeincludedinanabstractclass.Abstractclasscanincludenon-abstractmembers.HidingInheritedMembersAbaseclassandasubclassmaydefineidenticalmembers.publicclassA{publicintCounter=1;}publicclassB:A{publicintCounter=2;}thecompilergeneratesawarning.“new”asamodifierpublicclassA{publicintCounter=1;}publicclassB:A{publicnew
intCounter=2;}Polymorphism???Sealing(密封)FunctionsAnoverriddenfunctionmembermaysealitsimplementationwiththesealed
keyword,topreventitfrombeingoverriddenbyfurthersubclasses.classA{
publicvirtualvoidfun(){}}classB:A{publicsealedoverridevoidfun(){}}SealingClassessealtheclassitself,implicitlysealingallthevirtualfunctions,byapplyingthesealedmodifiertotheclassitself.Thebasekeywordaccessanoverriddenfunctionmemberfromthesubclass.classA
{privateintx=10;publicvirtualintget_x(){returnx;}
}classB:A
{publicoverrideintget_x()
{returnbase.get_x();
}
}publicclassBaseclass{publicintX;publicBaseclass(){}publicBaseclass(intx){this.X=x;}}publicclassSubclass:Baseclass{}Howtodefineaconstructorthathasparametersandcallanyofthebaseclass’sconstructors???publicclassSubclass:Baseclass{publicSubclass(intx):base(x){...}}ConstructorandfieldinitializationorderDerived
static
fieldsDerived
static
constructorDerived
instance
fieldsBase
static
fieldsBase
static
constructorBase
instance
fieldsBase
instance
constructorDerived
instance
constructorProblemDefinegeometricshapes:triangle,rectangle,andbox,andcalculatetheareaandvolumeoftheseshapes,usinginterfaceandclassinC#.valueandreferencetypesValuetypevariablescanbeassignedavaluedirectly.TheyarederivedfromtheclassSystem.ValueType.Thevaluetypesdirectlycontaindata.Referencetypesrefertomemorylocations.areferencetypedoesn'tstoreitsvaluedirectly.Instead,itstorestheaddresswherethevalueisbeingstored.Inotherwords,areferencetypecontainsapointertoanothermemorylocationthatholdsthedata.ref&outTheobjectTypepublicclassStack{intposition;object[]data=newobject[10];publicvoidPush(objecto){data[position++]=o;}publicobjectPop(){returndata[--position];}}Stackstack=newStack();stack.Push("sausage");strings=(string)stack.Pop();//DowncastConsole.WriteLine(s);Boxing(装箱)andUnboxing(拆箱)Boxingistheactofcastingavalue-typeinstancetoareferencetypeinstance.intx=9;objectobj=x;//BoxtheintUnboxingreversestheboxingoperation,bycastingtheobjectbacktotheoriginalvaluetype。inty=(int)obj;//Unboxtheinttypematchesinunboxingobjectobj=9;//9isinferredtobeoftypeintlongx=(long)obj;//InvalidCastExceptionMembersofObject
publicexternTypeGetType();publicvirtualboolEquals(objectobj);publicstaticboolEquals(objectobjA,objectobjB);publicstaticboolReferenceEquals(objectobjA,objectobjB);publicvirtualintGetHashCode();publicvirtualstringToString();protectedoverridevoidFinalize();protectedexternobjectMemberwiseClone();TheGetTypeMethodandtypeofOperatortwobasicwaystogetaSystem.Typeobject:GetTypeontheinstance(GetTypeisevaluatedatruntime)typeofoperatoronatypename(typeofisevaluatedstaticallyatcompiletime).exampleintx=3;Console.Write(x.GetType().Name);//Int32Console.Write(typeof(int).Name);//Int32Console.Write(x.GetType().FullName);//System.Int32Console.Write(x.GetType()==typeof(int));//TrueEqualsobjectx=3;objecty=3;Console.WriteLine(x==y);//FalseConsole.WriteLine(x.Equals(y));//TrueReferenceEqualsTODOGetHashCodeTODOTheToStringMethodTheToStringmethodreturnsthedefaulttextualrepresentationofatypeinstance.strings1=1.ToString();//s1is"1"strings2=true.ToString();//s2is"True"Problem2Definegeometricshapes:triangle,rectangle,andbox,andcalculatetheareaandvolumeoftheseshapes,usinginterfaceandclassinC#.interfaceAninterfaceissimilartoaclass,butitprovidesaspecificationratherthananimplementationforitsmembers.Themembersofaninterfacemustbemethods,properties,events,orindexers(索引器).Aninterfacecannotcontainconstants,fields,operators,instanceconstructors,destructors,norcananinterfacecontainstaticmembersofanykind.publicinterfaceIEnumerator{boolMoveNext();objectCurrent{get;}}Allitsmembersareimplicitlyabstractandpublic.InterfaceImplementationsclassCountdown:IEnumerator{intcount=11;publicboolMoveNext(){returncount−−>0;}publicobjectCurrent{get{returncount;}}}IEnumeratore=newCountdown();while(e.MoveNext())Console.Write(e.Current);ExtendinganinterfaceinterfaceIControl{voidPaint();}interfaceITextBox:IControl{voidSetText(stringtext);}interfaceIListBox:IControl{voidSetItems(string[]items);}interfaceIComboBox:ITextBox,IListBox{}ExplicitInterfaceImplementationinterfaceI1{voidFoo();}interfaceI2{intFoo();}publicclassWidget:I1,I2{publicvoidFoo()//Implicitimplementation{Console.Write("Widget'simplementationofI1.Foo");}intI2.Foo()//ExplicitimplementationofI2.Foo{Console.Write("Widget'simplementationofI2.Foo");return42;}}Widgetw=newWidget();w.Foo();//Widget'simplementationofI1.Foo((I1)w).Foo();//Widget'simplementationofI1.Foo((I2)w).Foo();//Widget'simplementationofI2.FooGenerictypesinC#publicclassStack<T>{intposition;T[]data=newT[100];publicvoidPush(Tobj){data[position++]=obj;}publicTPop(){returndata[--position];}}Tisatypeparameter.UsegenerictypesStack<int>stack=newStack<int>();stack.Push(5);stack.Push(10);intx=stack.Pop();//xis10inty=stack.Pop();//yis5publicclass###{intposition;int[]data;publicvoidPush(intobj){data[position++]=obj;}publicintPop(){returndata[--position];}}GenericMethodsstaticvoidSwap<T>(refTa,refTb){Ttemp=a;a=b;b=temp;}intx=5,y=10;Swap(refx,refy);//Swap<int>(refx,refy);GenericConstraintsclassSomeClass{}interfaceInterface1{}classGenericClass<T,U>whereT:SomeClass,Interface1whereU:new(){...}Therearesixkindsof
constraint:whereT:base-class//BaseclassconstraintwhereT:interface//InterfaceconstraintwhereT:class//Reference-typeconstraintwhereT:struct//Value-typeconstraintwhereT:new()//Parameterlessconstructor//constraintwhereU:T//NakedtypeconstraintDelegates(委托)delegatetype,definesaprotocol,specifyingalistofparametertypesandareturntype.delegateintTransformer(intx);//methoddeclaration???TransformeriscalledamethodcallerdelegateinstanceclassTest{
staticvoidMain()
{
Transformert=Square;//createdelegateinstance
intresult=t(3);//Invokedelegate
Console.WriteLine(result);//9
}
staticintSquare(intx){returnx*x;}//targetmethod}Transformert=Square;//createdelegateinstanceTransformert=newTransformer(Square);thestatementsaboveplaythesamerole.theformerisshorthandforthelatter.t.Invoke(3);
t(3)plug-inmethodwithdelegateswriteautilitymethodnamedTransformthatappliesatransformtoeachelementinanintegerarray.TheTransformmethodhasadelegateparameter,forspecifyingaplug-intransform.写一个名为Transform的函数,对整型数组中的每个元素加1,利用委托作为Transform的一个形参。publicdelegateintTransformer(intx);classUtil{publicstaticvoidTransform(int[]values,Transformert){for(inti=0;i<values.Length;i++)values[i]=t(values[i]);}}classTest{staticvoidMain(){int[]values={1,2,3};Util.Transform(values,Square);foreach(intiinvalues)Console.Write(i+"");//149}
staticintSquare(intx){returnx*x;}}MulticastDelegates
多播委托;组播委托;多路广播委托Alldelegateinstanceshavemulticastcapability,meaningthatadelegateinstancecanreferencealistoftargetmethods,SomeDelegated=SomeMethod1;d+=SomeMethod2;Removeoneoftargetmethodsfromadelegateinstance:d-=SomeMethod1;Targetmethods:
InstancevsstaticmethodBothinstancemethodsandstaticmethodscanbethetargetmethodsofadelegateinstance.TheinstancetowhichtheinstancemethodbelongsisreferencedbySystem.Delegateclass’sTargetproperty.classMyClass
{publicvoidfun(intx)
{Console.WriteLine(x);
}publicoverridestringToString()
{return"MyClass";
}
}classProgram
{delegatevoidmyDelegate(intx);staticvoidMain(string[]args)
{MyClassmc=newMyClass();myDelegatedel=newmyDelegate(mc.fun);//实例函数del.Invoke(20);//20Console.WriteLine(del.Target.GetType());//example.MyClassConsole.WriteLine(del.Target.ToString());//"MyClass"
}
}GenericdelegateTypespublicdelegateTTransformer<T>(Targ);staticdoublesqr(doublex){returnx*x;}staticvoidMain(){Transformer<double>s=Square;Console.WriteLine(s(3.3));//10.89}Func&ActionDelegatesFuncandActionarebothgenericdelegates,definedintheSystemnamespace.delegateTResultFunc<outTResult>();delegateTResultFunc<inT,outTResult>(Targ);delegateTResultFunc<inT1,inT2,outTResult>(T1arg1,T2arg2);...andsoon,uptoT16delegatevoidAction();delegatevoidAction<inT>(Targ);delegatevoidAction<inT1,inT2>(T1arg1,T2arg2);...andsoon,uptoT16publicstaticvoidfun<T>(T[]values,Func<T,T>transformer)
{for(inti=0;i<values.Length;i++)
{values[i]=transformer(values[i]);Console.WriteLine(values[i]);
}
}publicstaticdoubleadd(doublex){returnx+20;}staticvoidMain(string[]args)
{double[]arr=newdouble[]{1,2,3,4,5};fun<double>(arr,add);
}publicstaticvoidfun<T>(T[]values,Action<T>transformer)
{for(inti=0;i<values.Length;i++)
{transformer(values[i]);
}
}publicstaticvoidprint(doublex){Console.WriteLine(x);}staticvoidMain(string[]args)
{double[]arr=newdouble[]{1,2,3,4,5};fun<double>(arr,print);
}DelegateCompatibilitydelegatetypesareallincompatiblewitheachother,eveniftheirsignaturesarethesame.delegatevoidD1();delegatevoidD2();D1d1=Method1;D2d2=d1;//compile-timeerrorD2d2=newD2(d1);//permitted!!covariancefordelegatereturntypesdelegateobjectObjectRetriever();
staticvoidMain(){ObjectRetrievero=newObjectRetriever(GetString);objectresult=o();Console.WriteLine(result);//hello}staticstringGetString(){return"hello";}contravarianceforparametertypesadelegatetargetmethodmayhavelessspecificparametertypesthandescribedbythedelegate,calledcontravariance.delegatevoidStringAction(strings);...staticvoidMain(){StringActionsa=newStringAction(ActOnObject);sa("hello");}staticvoidActOnObject(objecto)//objectissmallerthanstring{Console.WriteLine(o);//hello}Event—在类里面用Eventsusethepublisher-subscriber
model.Apublisher
isanobjectthatcontainsthedefinitionoftheeventandthedelegate.Apublisherclassobjectinvokestheeventanditisnotifiedtootherobjects.Asubscriber
isanobjectthatacceptstheeventandprovidesaneventhandler.Thedelegateinthepublisherclassinvokesthemethod(eventhandler)ofthesubscriberclass.publicdelegatevoidPriceChangedHandler(decimaloldPrice,decimalnewPrice);(1)publicclassStock
{//publisher事件发布者stringsymbol;decimalprice;publicStock(stringsymbol){this.symbol=symbol;}publiceventPriceChangedHandlerPriceChanged;//一种特殊的委托,事件(2)publicdecimalPrice
{get{returnprice;}set{if(price==value)return;//fireeventifinvocationlistisnotemptyif(PriceChanged!=null)
PriceChanged(price,value);//在publisherStock中调用(3)price=value;
}
}
}publicstaticvoidchange(decimalx,decimaly)
{Console.WriteLine(y);
}publicstaticvoidup(decimalx,decimaly)
{Console.WriteLine("up");Console.WriteLine(y);
}staticvoidMain(string[]args)
{Stockst=newStock("LIU");st.PriceChanged+=change;//订阅事件st.PriceChanged+=up;//在此处订阅事件st.Price=20;
}StandardEventPatternTheNetFrameworkdefinesastandardpatternforwritingevents.eventsarebasedontheEventHandlerdelegateandtheEventArgsbaseclass.publicdelegatevoidEventHandler<TEventArgs>(objectsource,TEventArgse)whereTEventArgs:EventArgs;derivefromEventArgspublicclassPriceChangedEventArgs:EventArgs
{publicreadonlydecimalLastPrice,NewPrice;publicPriceChangedEventArgs(decimallastPrice,decimalnewPrice){LastPrice=lastPrice;NewPrice=newPrice;}
}definepublisherclasspublicclassStock
{stringsymbol;decimalprice;publicStock(stringsymbol){this.symbol=symbol;}publiceventEventHandler<PriceChangedEventArgs>PriceChanged;//EventHandlerisadelegateprotectedvirtualvoidOnPriceChanged(PriceChangedEventArgse)//here,fireanevent
{if(PriceChanged!=null)PriceChanged(this,e);
}publicdecimalPrice
{get{returnprice;}set
{if(price==value)return;OnPriceChanged(newPriceChangedEventArgs(price,value));price=value;
}
}
}definesubscribersstaticvoidstock_price_changed(objectsender,PriceChangedEventArgse)
{if((e.NewPrice-e.LastPrice)/e.LastPrice>0.1M)Console.WriteLine("Alert,10%priceincrease!");
}staticvoidMain(string[]args)
{Stockst=newStock("LIU");st.Price=27.10M;Console.WriteLine("OK");st.PriceChanged+=stock_price_changed;st.Price=31.59M;
}nongenericEventHandlerdelegateThismeansthatnoadditionalinformationneedbetransmittedwithevent.publiceventEventHandlerPriceChanged;EventAccessorsAnevent’saccessorsaretheimplementationsofits+=and−=functions.publiceventEventHandlerPriceChanged;//默认产生下面的代码EventHandler_priceChanged;//PrivatedelegatepubliceventEventHandlerPriceChanged{add{_priceChanged+=value;}remove{_priceChanged−=value;}}publicclassMyClass{//EventHanler_priceChanged;EventHandler<EventArgs>_priceChanged;//publiceventEventHandlerPriceChangedpubliceventEventHandler<EventArgs>PriceChanged{add{_priceChanged+=value;}remove{_priceChanged-=value;}
}publicvoidonChanged(EventArgse){_priceChanged(this,e);
}}staticvoidchange(objectsender,EventArgse){Console.WriteLine("pricechanged");}staticvoidMain(string[]args){
MyClassmy=newMyClass();
my.PriceChanged+=change;
my.onChanged(EventArgs.Empty);
}LambdaexpressionsAlambdaexpressionhasthefollowingform:
(parameters)=>expression-or-statement-blockAlambdaexpressionisanunnamedmethodwritteninplaceofadelegateinstance.Eachparameterofthelambdaexpressioncorrespondstoadelegateparameter.thetypeoftheexpression(whichmaybevoid)correspondstothereturntypeofthedelegate.DelegateintTransformer(inti);Transformersqr=x=>x*x;//sqr=x=>x*x;Console.WriteLine(sqr(3));x=>{returnx*x;}LambdaexpressionsareusedmostcommonlywiththeFuncandActiondelegates,soyouwillmostoftenseeourearlierexpressionwrittenasfollows:Func<int,int>sqr=x=>x*x;intr=sqr(3);Func<string,string,int>total=(s1,s2)=>s1.Length+s2.Lenghtintlength=total(“hello”,”world”);capturingoutervariablesstaticvoidMain(){
intfactor=2;//factorisanoutervariable
Func<int,int>multiplier=n=>n*factor;//nlocalvariable
Console.WriteLine(multiplier(3));//6}staticvoidMain(){intfactor=2;//factorisanoutervariableFunc<int,int>multiplier=n=>n*factor;//nlocalvariable
factor=10;Console.WriteLine(multiplier(3));//30}Action[]actions=newAction[3];for(inti=0;i<3;i++)actions[i]=()=>Console.Write(i);foreach(Actionainactions)a();//333Action[]actions=newAction[3];for(inti=0;i<3;i++){intloopScopedi=i;actions[i]=()=>Console.Write(loopScopedi);}foreach(Actionainactions)a();//012AttributesAttributesareanextensiblemechanismforaddingcustominformationtocodeelements(AttributeTargets:assemblies,types,members,returnvalues,andparameters).AnattributeisdefinedbyaclassthatinheritsfromtheabstractclassSystem.Attribute.ApplyingAnAttribute[Obsolete]publicclassFoo{...}[MyAttribute("Simpleclass","Version3.57")]//AttributewithparameterspublicclassMyOtherClass{}Predefined,ReservedAttributesTheObsoleteAttribute[Obsolete("UsemethodSuperPrintOut")]//producingwarningmessagestaticvoidPrintOut(stringstr){Console.Wri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车热处理生产线操作工安全意识强化知识考核试卷含答案
- 江西中医药大学《小学科学课程与教学》2025-2026学年期末试卷
- 长春科技学院《电力电子技术》2025-2026学年期末试卷
- 安徽现代信息工程职业学院《新闻采访学》2025-2026学年期末试卷
- 芜湖医药健康职业学院《流行病学》2025-2026学年期末试卷
- 应用气象学专业实习心得体会
- 焊剂烧结熔炼工岗前管理综合考核试卷含答案
- 稀土真空热还原工安全教育评优考核试卷含答案
- 家用电冰箱维修工岗前能力评估考核试卷含答案
- 聚甲基丙烯酸甲酯(PMMA)装置操作工岗后测试考核试卷含答案
- 2025年山东档案职称考试《档案基础理论》考试题库(浓缩500题)
- 【课件】吊索具使用及起重吊装安全管理
- 投标文件澄清函标准格式
- 2025PACK结构工程师校招笔试题及答案
- 2026届高考数学复习策略课件
- 零工经济中的女性劳动者权益保障研究
- 初中思想政治教学课件
- 2025年商务部直属事业单位第二批招聘工作人员(169人)笔试备考试题及答案详解(真题汇编)
- 中药灌肠护理操作规范
- 中国企业出海人力资源挑战白皮书(2024-2025版)
- 大排档租赁合同协议模板
评论
0/150
提交评论