TOC

This article is currently in the process of being translated into Thai (~98% done).

The Basics:

Function parameters

บทที่แล้วเราได้เรียนเกี่ยวกับ function แต่เราได้เรียนเกี่ยวกับ parameter ใน function แค่นิดหน่อย เพราะ parameter นั้นง่ายต่อการใช้ แต่ถ้าเรารู้จักวิธีใช้ เราจะใช้มันได้อย่างมีประสิทธิภาพ

เราจะมาทำความรู้จักกับ out และ ref modifier ใน C# และภาษาอื่นๆจะให้ความหมายของทั้ง 2 ตัวนี้ว่า by value และ by reference แปลว่า เวลาเราส่งค่า by value ให้ function เราจะส่งไปแค่ copy object ของมัน เราไม่ได้ส่งตัวจริงไป เพราะฉะนั้นเวลาเราเปลี่ยนค่าใน function มันจะไม่มีผลกับ object ตัวจริงของเรา

แต่ถ้าเราส่งค่า by reference ให้ function เวลาเราเปลี่ยนค่าใน object มันจะมีผลกับ object ตัวจริงของเรา

The ref modifier (แบบอ้างอิงค์)

ลองมาดูตัวอย่างต่อไปนี้

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(int number)
{
    number = number + 5;
}

เราสร้าง integer ตั้งค่าที่ 20 แล้วใช้ function AddFive() เพื่อบวก 5 เข้าไป แล้วมันได้ผลลัพธ์นั้นไหม? ปรากฏว่าไม่ได้ เพราะเราส่งแค่ copy object เข้าไป มันก็เข้าไปบวกกันในนั้น แต่ไม่ได้ค่ามันออกมา แล้วก็ไม่มี return value เพราะฉะนั้นเราจะใช้ ref แทน

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(ref int number)
{
    number = number + 5;
}

ดังที่เห็นด้านบน เราเพิ่ม ref ไปที่ function ถ้าเรา run app ของเรา ก็จะเห็นได้ว่า ค่านั้นได้เปลี่ยนไป

The out modifier (แบบตั้งค่า)

การทำงานของ out modifier ก็จะคล้ายๆกับ ref modifier เพราะ ทั้งคู่ pass by reference ต่างกันที่ initialize ค่าโดย ref ต้องตั้งค่าเริ่มต้นก่อน ส่วน out ไม่ต้อง แล้ว function ที่มี out ต้องตั้งค่าเพื่อ return ภายใน function

จะใช้ out หรือ ref ขึ้นอยู่กับการใช้งานที่แตกต่างกัน แต่จุดประสงค์ก็คือ การคืนค่าจาก function ด้วย C#

วิธีใช้ out modifier ก็เหมือนกับ ref modifier แค่เปลี่ยนจาก ref keyword เป็น out keyword ในตัวอย่างด้านบน เราต้องเอาค่าตั้งต้นใน function ออกก่อน

The params modifier (แบบตัวแปรหลายๆตัว)

Modifier ที่กล่าวมานั้น มี parameter ที่เป็นค่าเดี่ยวๆ ในบางครั้งเราต้องการ parameter ของ function ที่มีการขยายหรือย่อขนาดได้ โดยการใช้ array หรือ list

static void GreetPersons(string[] names) { }

การเขียนอาจจะค่อนข้างยุ่งยาก เขียนแบบสั้นๆได้ดังนี้

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

แต่เรามีวิธีเขียนที่ดีกว่า โดยการใช้ params keyword

static void GreetPersons(params string[] names) { }

เรียกการใช้งานดังนี้

GreetPersons("John", "Jane", "Tarzan");

ข้อดีของ params อีกอย่างนึงคือ เราสามารถส่ง parameter เป็น 0 ได้ แล้วยังเก็บ parameter อื่นได้อีกด้วย แต่เราสามารถใช้ params ได้ 1 params ต่อ 1 function ดังตัวอย่างด้านล่าง

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
Console.WriteLine("Hello, " + name);
}

This article has been deprecated!

This article has been re-organized and updated to better match the rest of the tutorial.

We suggest that you read this article instead: Method parameters


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!