Blog ตอนที่แล้ว ผมได้กล่าวสรุปไปแล้ว ว่าภาษา Java มีการส่งข้อมูล Pass by Value อย่างเดียว คราวนี้มาอีกภาษาที่ผมใช้ในการทำงานบ้าง C# จากโลกของ .NOT เฮ้ยย .NET ครับ ซึ่งผมได้เขียน Code โดยปรับจาก Java ในบทความก่อน ดังนี้ ครับ
namespace TestCSharpPassby { class Program { public static void Main(string[] args) { Company company = new Company(); company.CompanyName= "COMSWU"; Console.WriteLine("First >> " + company.CompanyName); ChangeNameVer1(company); Console.WriteLine("Second >> " + company.CompanyName); ChangeNameVer2(company); Console.WriteLine("Third >> " + company.CompanyName); ChangeNameVer3(company); Console.WriteLine("Fourth >> " + company.CompanyName); } public static void ChangeNameVer1(Company pCompany) { pCompany.CompanyName = "DebuggingSoft"; } public static void ChangeNameVer2(Company pCompany) { pCompany = new Company(); pCompany.CompanyName = "Chatri Soft"; } public static void ChangeNameVer3(Company pCompany) { pCompany = null; } } }
- Step 1 : ChangeNameVer1 ผมแก้ชื่อ Company ครับ เมื่อ Console แสดงผลลัพธ์เป็นไปตามที่ผมแก้ครับ คือ “DebuggingSoft”
- Step 2 : ChangeNameVer2 คราวนี้ผมเพิ่มลูกเล่นไปอีกนิดครับ New ใหม่ในนั้น แล้วทำการ Set ค่าใหม่ ผลปรากฏว่า ยังเป็น “DebuggingSoft” นั้นแหละ แสดงว่า C# Pass by Value
- Step 3 : ChangeNameVer3 ผมยัด Null ให้เลยครับ ถ้ามันต้องขึ้น Exceptionแต่มันไม่แสดงนี่สิ แสดงว่า C# Pass by Value
ผ่านการ Test ไป 3 อันแล้ว หลายคนคงคิดและว่า C# มันต้อง Pass by Value เหมือน Java แหละ ไม่มี Pass by Reference หรอก แต่ผมบอกว่าคิดผิดครับ C# มี Keyword สุดแสบอีกอันครับ คือ ref เพื่อบอกว่าตอนนี้ เราส่งข้อมูลแบบ Pass by Reference ครับ ทำงานมา 2 ปีในฝั่ง .Net ผมเพิ่งเคยใช้เป็นครั้งแรกแหละ 555 โดยผมเพิ่มอีก 2 Method เพื่อทดสอบครับ คือ ChangeNameVer4 และ ChangeNameVer5 ครับ
public static void ChangeNameVer4(ref Company pCompany) { pCompany = new Company(); pCompany.CompanyName = "Chatri Soft"; } public static void ChangeNameVer5(ref Company pCompany) { pCompany = null; }
หลายคงอาจจะคิดว่า ChangeNameVer4 และ ChangeNameVer5 มันคล้ายกับ Code เก่าที่ผมเขียน หรือป่าว ? คำตอบ คือ เกือบคล้ายครับ สังเกตุดีๆที่ Parameter มี Keyword ref อยู่ครับ จากนั้นผมแก้ที่ Method main แล้วทดสอบ Run ครับ
- Step4 : ChangeNameVer4 ตัว Code ChangeNameVer2 ต่างที่เพิ่ม Keyword ref ใน Method มีการสร้าง Object และ set ข้อมูลใหม้ ผลปรากฏว่า ค่าเปลี่ยนจาก “DebuggingSoft” เป็น "Chatri Soft" นั้นแหละ แสดงว่า C# Pass by Reference ได้ครับ
- Step5 : ChangeNameVer5 ตัว Code ChangeNameVer3 ต่างที่เพิ่ม Keyword ref ผลปรากฏว่า ได้
System.NullReferenceException
ครับ Error สมใจเลย และ แสดงว่า C# Pass by Reference ครับ
C# จดกำเนิดของมัน รากของมันมาจาก C++ รวมกับ Java แต่ตอนนี้ดูเหมือนนำ Java นิดหน่อย รอ Java 9 ออกมาครับ สำหรับใน C# มี Pass by Reference อยู่แล้วครับ มี Keyword ที่เราควรรู้ 2 ตัว คือ
》ref
》out
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.