C# Delegates Hell (part 2)

Have No Shell
2 min readOct 1, 2017

--

นี่คงเป็นซีรียส์เทาๆ เหงาๆ คล้ายๆกับ 1Q84 ของเจ้าพ่อความเหงา Haruki Murakami
หรือไม่ก็คล้าย One punch man ที่แต่ละตอนออกมาสั้นยิ่งกว่าความรู้สึกรวยตอนเงินเดือนออก (นี่มันแกคนเดียวชัดๆ)

วันนี้เป็นภาคต่อ ของซีรีย์ Delegates Hell
มีประเด็นให้ผู้หลงผิดเข้ามาอ่านพยายามจับอยู๋ 2 ประเด็น
1. Delegate and friends (EventHandler, EventArgs)
2. Mother of Delegate (Event)

เริ่มต้นกันด้วยก้าวถอยหลังซักหนึ่งก้าวนะครับ
เราต้องบอกว่าฟังก์ชันมี Signature แบบไหน ถึงจะสามารถเพิ่มเข้าไปใน Delegate ได้ ใช่ไหมครับ เดี๋ยวผมยกตัวอย่าง เพื่อทวนเนื้อหาอาทิตย์ที่แล้วให้ดูครับ

public delegate string CustomDelegate(int n);
public CustomDelegate customDelegate;

จากบรรทัดข้างบนนี้ ฟังก์ชันที่สามารถเพิ่มเข้าไปใน customDelegate ได้ต้องมี Parameter คือ int และ return type คือ string เช่น

public string GetFormattedNumber(int n){  return string.Format(“${0}”, n);}

และเวลาจะเพิ่มฟังก์ชันเข้าไปใน Delegate ก็ทำแบบนี้

customDelegate += GetFormattedNumber;

ปี๊ดดดด !! หมดเวลาสำหรับความเดิมตอนที่แล้ว (ถ้าใครยังไม่รู้ว่าผมบ่นอะไร ผมแนะนำให้ไปลองอ่าน Part 1 ของซีรียส์นี้ดูครับ)

เอาละ ถึงเวลาที่ต้องเก้าไปข้างหน้าแล้ว

วันนี้เสนอตอน (เสียงโดเรม่อน) …

EventHandler r r r r

ถึงแม้จะพยายามเปิดตัวอย่างยิ่งใหญ่แค่ไหน แต่จริงๆแล้ว มันก็คือ Delegate นี่แหละครับ

แค่เค้าตั้งชื่อให้ดีเท่ห์ๆหน่อย และบังคับ Signature มาแบบงงๆ
ซึ่งมันก็คือ Delegate ที่มีรูปร่างหน้าตาแบบนี้ครับ

public delegate void EventHandler (object sender, EventArgs e)

จากบรรทัดบน เราสรุปได้ว่า ฟังก์ชันที่จะเพิ่มใน EventHandler ได้นั้น

ต้องมี Parameter 2 ตัวคือ object, EventArgs และต้องมี return type เป็น void

เช่น

public void ThisCanAddedToEventHandler(object obj, EventArgs args){    // do nothing}

แค่นี้เอง เป็นไงกันบ้างครับ Delegate กับ EventHandler มันคือสิ่งเดียวกันนั่นเอง (Delegate ก็ดีตรงที่ว่าเราออกแบบมันได้ทุกอย่าง, EventHandler ก็ดีตรงที่ว่าชื่อมันเท่ห์ และมันดูกลางๆดี
ผู้อ่านจะใช้อันไหนก็สุดแล้ัวแต่จะเลือกตามความเหมาะสมเลยครับ ก็เหมือนกับคนรักหมามักจะไม่ชอบแมว คนรักแมวมักจะไม่ชอบหมา แต่ก็มีคนบางประเภทที่ชอบไปหมด แต่ถ้าถามผม ผมชอบหมา … อร่อยดี .. ไม่ใช่ !!)

ผมขอพักไปกินหมา เอ้ย ! พิซซ่าหน้าใหม่ Smoky Salmon ของ Pizza Company ซักแป้บนะครับ

เอาละครับ มาต่อกันดีกว่า

นอกจากเพื่อนใหม่ (EventHandler) แล้ว เรามาทำความรู้จักสมาชิกใหม่ของตอนนี้กันอีกคน เธอมีชื่อว่า Event !!!
และผมจะบอกความลับให้ฟัง ที่จริงเธอคือภรรยาของ Delegate นั่นเองครับ (รู้แล้วเหยียบไว้เลยนะ เพราะว่าถ้าไปพูดให้คนอื่นฟัง เค้าอาจจะหาว่าเราเพี้ยน ๕๕๕+)

หมายความว่ายังไง ?

ความหมายก็ตรงตัว คือ ภรรยา จะมีสิทธิ์เหนือคุณสามี (Delegate) ทุกอย่าง สามารถบังคับคุณสามีให้เดินตามครรลองที่เหมาะสม คนข้างนอกไม่สามารถเรียกใช้งานภรรยาได้ และมีความเชื่อว่าตนเองถูกออกแบบมาดีพร้อม ไม่อนุญาติให้ใครมาเปลี่ยนแปลงตัวเอง (ทำไมมันรู้สึกถึงความเสี่ยง หึหึ ไม่เป็นไรครับ ผมยอมเสี่ยงพูดมันออกมาแทนพ่อบ้านทุกคน เพื่อให้ทุกท่านเกิดความเข้าใจ ในความสามี (Delegate) มากขึ้น T^T ใครอยากนัดดื่มเบียร์ตอนสิ้นปี ผมพร้อมนะ)

มาดูว่า เธอ (Event) มีิอภิสิทธิ์อะไรบ้าง

  1. เธอมีความสามารถในการเพิ่ม ลบ สามีของเธอได้ (สามีของเธอมีสิทธิ์แค่ เพิ่ม/ลบ กล้วย เท่านั้น (ประโยคนี้รู้สึกแปลกๆ)) นั่นหมายความว่า เธอจะมีสามีกี่คนก็ได้! โอ้ว แม่ กวางน้อยยยย
  2. เธอสามารถป้องกันตัวเอง จากการถูกเซ็ตค่าใหม่ได้ (ไม่อนุญาติให้ใช้เครื่องหมาย = กับเธอ) ในขณะที่คุณสามี สามารถถูกล้างสมอง ถูกเซ็ตค่าใหม่ได้อย่างง่ายดาย (มันยิ่งเศร้าเข้าไปเรื่อยๆนะเนี่ย)
  3. เธอสามารถป้องกันตัวเอง จากการถูกเรียกใช้เธอให้ทำงาน หรือรบกวนเธอจากภายนอกได้ (จะเกินไปแล้วนะ !)(แต่ถ้าเป็นภายใน ก็สามารถเรียกเธอให้ทำงานได้นะ อิอิ พวกเรายังมีความหวัง เฮ!)

จบครับ (เอาสั้นๆ ง่ายๆแบบนี้แหละ)

Part นี้ ผมขอยังไม่ยกตัวอย่างให้ดูนะครับ เพราะผมเชื่อว่าทุกท่านสามารถหาตัวอย่าง ในเน็ตได้อย่างง่ายดาย และผมยังคิดหาวิธีอธิบายตัวอย่างให้เข้าใจง่ายๆ ไม่ได้ และอีกข้อคือผมขอตัวไปล้างจานก่อนครับ แล้วพบกันใหม่ ลาก่อนครับ ทุกท่านนนนน T^T

ปล. Dig Deep into Delegate hell part 3 จะมาในอีกเร็วๆนี้ !
(ภายในวันที่ 2017–10–09)(เพื่อเตือนตัวเอง)(และให้คนอื่นเตือน)

มาแล้วจ้า คลิกเฮีย

--

--