[C#] Pass By ?

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;
    }
  }
}

2016-07-13_221816

  • 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 ครับ

2016-07-08_223759

  • 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.