C#涓????间?????寮??ㄤ???璇︾?瑙f??
1.??杩??间????肩被??锛?
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>
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?规???绀轰?锛?
staticvoidSwapByRef(refintx,refinty)
{
inttemp=x;
x=y;
y=temp;
}
1.??杩??间???寮??ㄧ被??
涓??㈢??绀轰?婕?绀洪??杩??煎??Change?规?浼???寮??ㄧ被???????arr???变?璇ュ???版???arr??寮??????浠ユ?????芥?存?规?扮???绱????笺??浣????璇??惧????伴???板?????颁???????瀛?浣?缃??讹?璇ユ??浣?浠??ㄦ?规???????锛?骞朵?褰卞????濮?????arr??
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?抽???浠ュ?锛??朵?涓?涓?涓?ず渚??稿?????规?????????浠讳??存?归?戒?褰卞??璋??ㄧ?搴?涓?????濮?????
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????杩?琛?浜ゆ?€??
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?抽???锛???璋??ㄧ?搴?涓??浼?????浠讳??存?广??
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();
}