zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#涓????间?????寮??ㄤ???璇︾?瑙f??

c#
2023-06-13 09:15:15 时间

涓???浼???????BR>?㈠??互??杩??间???互??杩?寮??ㄤ??????般????杩?寮??ㄤ??????板??璁稿?芥?版????锛??规???灞??с??绱㈠??ㄣ??杩?绠?绗﹀???????芥?帮??存?瑰???扮???硷?骞朵???璇ユ?存?广??

浜???浼????肩被??????BR>?肩被???????存?ュ?????舵?版???杩?涓?寮??ㄧ被??????涓???锛???????????舵?版????寮??ㄣ????姝わ????规?浼????肩被?????????崇?????规?浼?????????涓?涓????????规?????????瀵瑰???扮???存?瑰?璇ュ????涓???ㄧ????濮??版????浠讳?褰卞????濡???甯?????璋??ㄧ???规??存?瑰???扮???硷?蹇?椤讳娇?ref??out?抽?????杩?寮??ㄤ???璇ュ???般??涓轰?绠???璧疯?锛?涓??㈢??绀轰?浣跨?ref??

1.??杩??间????肩被??锛?

澶??朵唬??浠g??濡?涓?:

classPassingValByVal
{
staticvoidSquareIt(intx)
//Theparameterxispassedbyvalue.
//Changestoxwillnotaffecttheoriginalvalueofx.
{
x*=x;
System.Console.WriteLine("Thevalueinsidethemethod:{0}",x);
}
staticvoidMain()
{
intn=5;
System.Console.WriteLine("Thevaluebeforecallingthemethod:{0}",n);

SquareIt(n);//Passingthevariablebyvalue.
System.Console.WriteLine("Thevalueaftercallingthemethod:{0}",n);
}
}


????n涓哄?肩被??锛??????舵?版????间负5锛???褰?璋??SquareIt?讹?n????瀹硅?澶??跺?板???x涓???ㄦ?规???灏?璇ュ???版?骞虫?广??浣??Main涓??n???煎?ㄨ??SquareIt?规????????稿??????瀹???涓?锛??规??????????存?瑰??奖??灞??ㄥ????x??

2.??杩?寮??ㄤ????肩被??
涓??㈢??绀轰??や娇?ref?抽???浼??????颁互澶?锛??朵?涓?涓?涓?绀轰??稿???????扮???煎?ㄨ??ㄦ?规????????存??BR>

澶??朵唬??浠g??濡?涓?:

classPassingValByRef
{
staticvoidSquareIt(refintx)
//Theparameterxispassedbyreference.
//Changestoxwillaffecttheoriginalvalueofx.
{
x*=x;
System.Console.WriteLine("Thevalueinsidethemethod:{0}",x);
}
staticvoidMain()
{
intn=5;
System.Console.WriteLine("Thevaluebeforecallingthemethod:{0}",n);

SquareIt(refn);//Passingthevariablebyreference.
System.Console.WriteLine("Thevalueaftercallingthemethod:{0}",n);
}
}


??ず渚?涓??浼?????涓??n???硷??????n??寮??ㄣ?????x涓??int绫诲??锛?瀹????int??寮???????涓?负瀵n??寮????????姝わ?褰??ㄦ?规???瀵x姹?骞虫?规?讹?瀹???琚??骞虫?圭???x??寮??ㄧ??椤癸?n??

3.浜ゆ?㈠?肩被??
?存?规??浼??????扮???肩??甯歌?绀轰??Swap?规?锛??ㄨ??规?涓????x??y涓や釜????锛??跺??浣挎?规?浜ゆ?㈠?浠?????瀹广??蹇?椤婚??杩?寮??ㄥ??Swap?规?浼??????帮??﹀??锛??规?????澶?????灏??????扮?????板??????浠ヤ???娇?ㄥ??ㄥ???扮??Swap?规???绀轰?锛?

澶??朵唬??浠g??濡?涓?:
staticvoidSwapByRef(refintx,refinty)
{
   inttemp=x;
   x=y;
   y=temp;
}

涓???浼???寮??ㄧ被??????BR>寮??ㄧ被????????涓??存?ュ?????舵?版???瀹???????????舵?版????寮??ㄣ??褰???杩??间???寮??ㄧ被???????版?讹??????芥?存?瑰??ㄦ?????????版???濡???绫绘???????笺??浣?????娉??存?瑰??ㄦ??韩???硷?涔?灏辨???锛?涓??戒娇?ㄧ?稿????寮??ㄤ负?扮被??????瀛?骞朵娇涔??ㄥ??澶?淇??????ヨ?杩??峰??锛?搴?浣跨?ref??out?抽???浼??????般??涓轰?绠???璧疯?锛?涓??㈢??绀轰?浣跨?ref??

1.??杩??间???寮??ㄧ被??
涓??㈢??绀轰?婕?绀洪??杩??煎??Change?规?浼???寮??ㄧ被???????arr???变?璇ュ???版???arr??寮??????浠ユ?????芥?存?规?扮???绱????笺??浣????璇??惧????伴???板?????颁???????瀛?浣?缃??讹?璇ユ??浣?浠??ㄦ?规???????锛?骞朵?褰卞????濮?????arr??

澶??朵唬??浠g??濡?涓?:
classPassingRefByVal
{
staticvoidChange(int[]pArray)
{
pArray[0]=888;//Thischangeaffectstheoriginalelement.
pArray=newint[5]{-3,-1,-2,-3,-4};//Thischangeislocal.
System.Console.WriteLine("Insidethemethod,thefirstelementis:{0}",pArray[0]);
}

staticvoidMain()
{
int[]arr={1,4,5};
System.Console.WriteLine("InsideMain,beforecallingthemethod,thefirstelementis:{0}",arr[0]);

Change(arr);
System.Console.WriteLine("InsideMain,aftercallingthemethod,thefirstelementis:{0}",arr[0]);
}
}


?ㄤ?涓?ず渚?涓???扮?arr涓哄??ㄧ被??锛??ㄦ??娇?ref???扮?????典?浼???缁??规????ㄦ????典?锛?灏????规?浼???????arr??寮??ㄧ??涓?涓???????杈??烘?剧ず?规??????芥?存?规?扮???绱?????瀹癸??ㄨ?绉????典?锛?浠?1?逛负888??浣?????Change?规???浣跨?new杩?绠?绗︽?ュ?????扮????瀛??ㄥ??锛?灏?浣垮????pArray寮??ㄦ?扮???扮?????姝わ?杩?涔?????浠讳??存?归?戒?浼?褰卞????濮??扮?arr锛?瀹????Main????寤虹??锛???瀹???涓?锛???ず渚?涓???寤轰?涓や釜?扮?锛?涓?涓??Main??锛?涓?涓??Change?规?????

2.??杩?寮??ㄤ???寮??ㄧ被??
??ず渚??ゅ?ㄦ?规?澶村??璋??ㄤ腑浣跨?ref?抽???浠ュ?锛??朵?涓?涓?涓?ず渚??稿?????规?????????浠讳??存?归?戒?褰卞??璋??ㄧ?搴?涓?????濮?????

澶??朵唬??浠g??濡?涓?:
classPassingRefByRef
{
   staticvoidChange(refint[]pArray)
   {
       //Bothofthefollowingchangeswillaffecttheoriginalvariables:
       pArray[0]=888;
       pArray=newint[5]{-3,-1,-2,-3,-4};
       System.Console.WriteLine("Insidethemethod,thefirstelementis:{0}",pArray[0]);
   }

   staticvoidMain()
   {
       int[]arr={1,4,5};
       System.Console.WriteLine("InsideMain,beforecallingthemethod,thefirstelementis:{0}",arr[0]);

       Change(refarr);
       System.Console.WriteLine("InsideMain,aftercallingthemethod,thefirstelementis:{0}",arr[0]);
   }
}


?规??????????????存?归?藉奖??Main涓?????濮??扮???瀹???涓?锛?浣跨?new杩?绠?绗﹀???濮??扮?杩?琛?浜????板????????姝わ?璋??Change?规???锛?瀵arr??浠讳?寮??ㄩ?藉?????Change?规?涓???寤虹??浜?涓???绱????扮???

3.浜ゆ??袱涓??绗︿覆
浜ゆ?㈠?绗︿覆????杩?寮??ㄤ???寮??ㄧ被?????扮??寰?濂界??绀轰?????ず渚?涓??str1??str2涓や釜瀛?绗︿覆?Main涓???濮???锛?骞朵?涓虹?ref?抽???淇??圭?????颁???缁?SwapStrings?规???杩?涓や釜瀛?绗︿覆?ㄨ??规???浠ュ??Main????杩?琛?浜ゆ?€??

澶??朵唬??浠g??濡?涓?:
classSwappingStrings
{
staticvoidSwapStrings(refstrings1,refstrings2)
//Thestringparameterispassedbyreference.
//Anychangesonparameterswillaffecttheoriginalvariables.
{
stringtemp=s1;
s1=s2;
s2=temp;
System.Console.WriteLine("Insidethemethod:{0}{1}",s1,s2);
}

staticvoidMain()
{
stringstr1="John";
stringstr2="Smith";
System.Console.WriteLine("InsideMain,beforeswapping:{0}{1}",str1,str2);

SwapStrings(refstr1,refstr2);//Passingstringsbyreference
System.Console.WriteLine("InsideMain,afterswapping:{0}{1}",str1,str2);
}
}


??ず渚?涓????瑕???杩?寮??ㄤ??????颁互褰卞??璋??ㄧ?搴?涓?????????濡??????朵??规?澶村???规?璋??ㄤ腑绉婚?ref?抽???锛???璋??ㄧ?搴?涓??浼?????浠讳??存?广??

????寮??ㄧ被?????版???间???锛?澶??????锛?
绫荤??榛?璁ょ??emberwiseClone?规???寤轰?涓??琛ㄥ??????规?????寤轰?涓??板?璞★??跺??灏?褰???瀵硅薄????????瀛?娈靛??跺?拌??板?璞°??濡???瀛?娈垫???肩被????锛???瀵硅?瀛?娈垫?ц???浣?澶??躲??濡???瀛?娈垫????绫诲??锛???澶??跺??ㄤ?涓?澶??跺??ㄧ??瀵硅薄锛???姝わ???濮?瀵硅薄???跺?????ㄥ??涓?瀵硅薄??娣辨?疯?,?冲???Cloneable?ュ??ICloneable???ㄤ?娣辨?疯???娴??疯???杩?浜??芥???蹇碉?浣?????瑕???浠???瑙o?

澶??朵唬??浠g??濡?涓?:
  classClassA:ICloneable
   {
       publicstringstr;
       publicSubClasssubclass;
       publicClassA()
       {
           str="classAstr";
           subclass=newSubClass();
       }
       //娣卞??讹?澶?灞?涓?????emberwiseClone()瀹??村??版繁澶???BR>       publicobjectClone()
       {
          //this.a=(string)this.a.Clone();
           //this.b=(B)this.b.Clone();
           varne=newClassA();
           ne.str=this.str;
           ne.subclass=(SubClass)this.subclass.Clone();//this.b??璇?杩???病??????
           returnne;
          //returnthis.MemberwiseClone();
       }
   }

   classSubClass:ICloneable
   {
       publicstringstr;
       publicSubClass()
       {
           this.str="subclassstr";
       }
       //娣卞??讹???涓哄???灞?锛???浠ュ??互??emberwiseClone()?规?
       publicobjectClone()
       {
           this.str=(string)this.str.Clone();
           returnthis.MemberwiseClone();
       }