Pass Value Type
- By Value โ Read Only
- By Reference โ Read & Write
- By Out โ Same as Ref, but Write first
Pass By Value
- ุงูู ุจู ุฑุฑ ุงูููู ุฉ ุจุณ ููู ุจูุนู ู ูุณุฎุฉ ุจูุดุชุบู ุนูููุง ูู ุงู function ูุจุนุฏ ุฃู ุง ุจูุฎูุต ุจูู ุณุญ ุงููุณุฎุฉ ุฏู ูู ุด ุจูุบูุฑ ูู ุงูุฃุตู
public static void SWAP (int X, int Y)
{
int Temp = X;
X = Y;
Y = Temp;
}
static void Main()
{
int A = 7, B = 3;
SWAP(A, B); // by value ุงูููู
ู
ุด ูุชุชุบูุฑ
}
Pass By Reference
ููู ุงูู ุจุจุนุช ุงูู ุชุบูุฑ ููุณู ู ุด ุจุณ ุงูููู ุฉ ูุฃู ุชุบููุฑ ุจูุญุตู ุฌูุง ุงู function ุจูุญุตู ุจุฑุถู ูู ุงูvariables ุงูุฃุตููุฉ
public static void SWAP (ref int X, ref int Y)
{
int Temp = X;
X = Y;
Y = Temp;
}
static void Main()
{
int A = 7, B = 3;
SWAP(ref A, ref B); // by Reference
//A = 3, B = 7
}
Pass By Out
- ุฒู ุงู reference ุจุงูุธุจุท ุจุณ ุงูุช ูู ุฌูุช ูู ุงู reference ุชุฏุฎู ู ุซููุง variable ู ุด ู ุญุฏุฏูู ููู ุฉ ููุฏููู ุฅูุฑูุฑ ุนุดุงู ุงูู ูุฑูุถ ููุฑุฃ ุงูููุงู ุฏุง (Read)
- ูุงูุญู ุงูู ุงุณุชุฎุฏู out
public static void SumMul(int X , int Y , out int S , out int M)
{
S = X + Y;
M = X * Y;
}
int A = 7, B = 3, SResult, MResult;
SumMul(A, B, out SResult, out MResult);
//We can define it at same call
SumMul(A, B, out int SResult, out int MResult);
// _ discard: ูู ุนูุฏู ู
ุชุบูุฑ ู
ุด ูุณุชุฎุฏู
ู
SumMul(10,7, out _, out int SR);
Reference Type (Pass)
Pass By Value
-
ููุง ุจูุง ู ุฎุชููุฉ ุงุญูุง ุจูุชุนุงู ู ุฃูู ุญุงุฌุฉ ู ุน ุงู heap ู ุด ู ุน ุงู stackุ ููู ุชูุชูุฑ ููุง ุจูููู ูู Reference Types ุงู ุงูุช ูู ุดุงูุฑุช ู ู ref ู ref ุชุงูู ุฃููู ุจุงูุธุจุท ุจุดุงูุฑ ุนููู ุฃู Pointer ูููู ููุณ ุงูู ูุงู ูู ุงูู ูู ูุฑู
-
ูุจุงูุชุงูู ุฃู ุชุบููุฑ ููุญุตู ููุณู ุน ูู ุงู variable ุงูุฃุตูู
-
ูุฏู ุจุงุฎุชุตุงุฑ ุงูู ุจุนูุฏ ุชุณู ูุฉ ุงู variable ุจุงุณู ุชุงูู ูุงูุชุบููุฑ ุงููู ููุญุตู ููุญุตู ูู ุงูุฃุตูู
-
ูู ุบูุฑุช ูู ุงูููู ุฉ ุจูุณู ุน ูู ุงูููู ุฉ ุงูุฃุตููุฉ ูุจูุดุงูุฑู ุนูู ููุณ ุงูุญุงุฌุฉ ูู ุงู heap
public static void RefByValue(int[] Arr)
{
Console.WriteLine(Arr.GetHashCode()); // Same
Arr[Arr.Length - 1] = 0;
Console.WriteLine("In Method");
foreach (int i in Arr) Console.WriteLine(i); // 1 0
}
//Main
int[] A = [1, 2];
Console.WriteLine(A.GetHashCode()); // Same
RefByValue(A);
Console.WriteLine("In Main");
foreach (int i in A) Console.WriteLine(i); // 1 0 : Changed
- ูู ุฎููุชูุง ุชุดุงูุฑ ุนูู array ุชุงููุฉ ููููุง ูุชุจูุง ุฒู ุงู pointer ุจุงูุธุจุท ููู ุงู method ูุชุฑูุญ ุชุดุงูุฑ ุนูู ุญุชุฉ ุชุงููุฉ ูู ุงู heap ุงููู ูููุง ุงู array ุงูุฌุฏูุฏุฉ ุฏู ูุฃู ุชุบููุฑ ููุญุตู ููุญุตู ุนูู ุงู array ุงูุฌุฏูุฏุฉ ูู ููุด ุฃู ุนูุงูุฉ ุจุงููุฏูู ุฉ ูู ุด ูููู ุณูุง
public static void RefByValue(int[] Arr)
{
Console.WriteLine(Arr.GetHashCode()); // Same
int[] newArr = [5, 6, 7, 8];
Arr = newArr;
Arr[Arr.Length - 1] = 0; // Change at new one
Console.WriteLine($"newArr: {Arr.GetHashCode()}"); // diff
Console.WriteLine("In Method");
foreach (int i in Arr) Console.WriteLine(i); // new one
}
//Main
int[] A = [1, 2];
RefByValue(A);
Console.WriteLine(A.GetHashCode());
Console.WriteLine("In Main");
foreach (int i in A) Console.WriteLine(i);
Pass By Reference
- ูุชุจูู ููุณ ุงูุญูุงุฑ ูู ุงููู ููู ูู ุบูุฑุช ูู ุงูููู ุฉ
- ุงููุฑู ููุธูุฑ ุงูู ูู ุฎููุช ุงู array ุชุดุงูุฑ ุนูู ูุงุญุฏุฉ ุชุงููุฉ ูู ุงูุญุงูุฉ ุฏู ุงูุฃุตููุฉ ูุงููู ูู ุงู method ุงูุงุชููู ููุฑูุญูุง ูุดุงูุฑู ุนูู ุงูุฌุฏูุฏุฉ ุฏู ูุนูู ุงู array ุงู main ูู ุงู ูุชุชุบูุฑ ูุชุจูุง ุจุชุดุงูุฑ ูู ุงู heap ุนูู ุงูุฌุฏูุฏุฉ ุงููู ุบูุฑุชูุง ูู ุงู method
public static void RefByValue(ref int[] Arr)
{
Console.WriteLine(Arr.GetHashCode());
int[] newArr = [5, 6, 7, 8];
Arr = newArr; // The main one will be changed
Arr[Arr.Length - 1] = 0;
Console.WriteLine($"newArr: {Arr.GetHashCode()}");
Console.WriteLine("In Method");
foreach (int i in Arr) Console.WriteLine(i);
}
//Main
int[] A = [1, 2];
Console.WriteLine(A.GetHashCode());
RefByValue(ref A);
Console.WriteLine(A.GetHashCode());
Console.WriteLine("In Main");
foreach (int i in A) Console.WriteLine(i);