วิธีหนึ่งใช้วิธีอื่นมากไปหรือไม่หรือทั้งสองวิธี“ โอเวอร์โหลด”


13

ถ้าฉันสร้างวิธีนี้

public void foo()

จากนั้นฉันก็สร้างเวอร์ชันที่โอเวอร์โหลดเช่นนี้

public void foo( string bar )

เราบอกว่าฟังก์ชั่นที่สองโอเวอร์โหลดครั้งแรกหรือทั้งสองวิธีเท่ากันคือ "โอเวอร์โหลด"

สิ่งนี้จะบอกเป็นนัย (ฉันคิดว่า) ว่ามีฟังก์ชั่นประเภทฐานที่ถูกโหลดมากเกินไปโดยฟังก์ชั่นอื่น (คล้ายกับมรดก แต่ไม่ได้จริงๆ)

สมมติว่าวิธีหนึ่งสามารถ "โอเวอร์โหลดวิธีอื่น" ก็จะหมายถึงคำเช่น "โอเวอร์โหลด" และ "โอเวอร์โหลด" หากนั่นคือคำใด ๆ แต่นั่นก็ไม่ได้รู้สึกถูกต้องเลยโดยเฉพาะอย่างยิ่งเมื่อคุณมีภาระงานมากเกินไป

ฉันมาถึงคำถามนี้เมื่อฉันต้องการเขียนกระบวนการสร้างวิธีโอเวอร์โหลดและฉันต้องการวิธีที่ถูกต้องที่สุดในการจดบันทึก

ตัวอย่าง:

  • ฉันบรรทุกเกินพิกัด foo
  • ฉันกำลังมากไปfooด้วยfoo( string bar )
  • ฉันกำลังสร้างวิธีการโอเวอร์โหลด
  • ฉันกำลังฟูมากเกินไป

ดังนั้นใช่ฉันคิดแบบนี้ฉันไม่แน่ใจว่าจะทำอย่างไร มีคำอธิบายของฟังก์ชั่นการทำงานหนักมากเกินไปออนไลน์หลายร้อยหากไม่ใช่ แต่มีเพียงแวบแรกฉันไม่พบที่อยู่นี้


ฉันอยากจะรู้ว่าทำไมคำว่าโอเวอร์โหลดจึงถูกใช้ ดูเหมือนจะไม่สมเหตุสมผลเลย กำลังโหลดอะไรอยู่ มันจะโหลดอีกครั้งหรือมากเกินไปได้อย่างไร
Martin Maat

@MartinMaat คุณอ่านคำตอบที่ยอมรับโดย thitonและแสดงความคิดเห็นกับkindallแล้วหรือยัง? ดูเหมือนว่าพวกเขาจะอธิบายได้ดีว่ากำลังโหลดอะไรอยู่
8bittree

ฉันได้อ่านสิ่งเหล่านี้แล้วพวกเขาอธิบายแนวคิดไม่ใช่เชิงชาติพันธุ์วิทยา
Martin Maat

คำตอบ:


29

เมื่อพูดถึงโอเวอร์โหลดชื่อของฟังก์ชั่นโอเวอร์โหลดไม่ใช่ฟังก์ชั่นของตัวเอง ฟังก์ชันโอเวอร์โหลดชื่อคือ "โอเวอร์โหลด" และโอเวอร์โหลดชื่อ แต่ไม่ใช่ซึ่งกันและกัน ในตัวอย่างของคุณ"public void foo()"และ"public void foo( string bar )"ทั้งคู่โอเวอร์โหลดชื่อ "foo" ดังนั้นคุณไม่สามารถพูดในแง่ของโอเวอร์โหลดและโอเวอร์โหลดของฟังก์ชันใดฟังก์ชันหนึ่งเนื่องจากไม่มีความสัมพันธ์โดยตรง

ในตัวอย่างของคุณคุณสามารถพูดได้ว่าคุณกำลังโหลดเกินพิกัด "foo" (ชื่อ) ด้วย "foo (แถบสตริง)" (ฟังก์ชั่น) แต่คุณไม่สามารถพูดได้ว่าคุณสร้างวิธีที่ใช้งานมากเกินไปเพราะวิธีการต่างๆ คุณสามารถพูดได้ว่าคุณสร้างวิธีการบรรทุกเกินพิกัด การกำหนด "การทำเกินพิกัด" เป็นเพียงวิธีที่แย่กว่าในการพูดว่า "เกินพิกัดฟู"


แต่จะไม่ทุกฟังก์ชั่นโอเวอร์โหลดชื่อของมันแม้ว่าจะไม่มีฟังก์ชั่นอื่น ๆ ที่เหมือนกันหรือไม่?
leftaroundabout

ฉันเห็นด้วยกับสิ่งนี้เป็นคำตอบสำหรับคำถามทั่วไปด้านบน แต่ถ้ามีคนหนึ่งเรียกฟังก์ชั่นหนึ่งจากอีกอันหนึ่งฉันก็รับรู้ถึงความรู้สึกที่อีกคนหนึ่งทำงานหนักเกินไป
Joshua Drake

3
@leftaroundabout: "Overloading" หมายความว่าคุณกำลังทำมากกว่า "loading" มากกว่าปกติดังนั้นคำนี้จะใช้เมื่อคุณมีฟังก์ชันมากกว่าหนึ่งฟังก์ชันที่มีชื่อเดียวกัน
kindall

ตกลงกับ @kindall; คำว่า "โอเวอร์โหลด" ในบริบทการพัฒนาซอฟต์แวร์หมายถึง "เพื่อกำหนดความหมายมากกว่าหนึ่งรายการให้กับ"; การโอเวอร์โหลดคอลัมน์ใน DB (หมายถึงขึ้นอยู่กับฟิลด์อื่น ๆ ), การโอเวอร์โหลดพารามิเตอร์ (หมายถึงขึ้นอยู่กับพารามิเตอร์อื่น ๆ ) ฯลฯ วิธีการหนึ่งจะไม่โอเวอร์โหลดอื่น ๆ แต่ถ้ามีมากกว่าหนึ่งวิธีที่มีชื่อเดียวชื่อคือ " มากเกินไป"
KutuluMike

15

ฉันก็จะบอกว่าfooมันมากเกินไป แน่นอนว่าไม่มีความสัมพันธ์ระหว่างหัวหน้า / ทาสหรือผู้ปกครอง / เด็กเกิดขึ้น


2
เห็นด้วย - เป็นชื่อของวิธีการหรือตัวดำเนินการที่โอเวอร์โหลดไม่ใช่ตัววิธี เพื่อไม่ให้สับสนกับการเอาชนะซึ่งการใช้งานของวิธีการที่กำหนดในคลาสย่อยแทนที่การใช้งานในระดับผู้ปกครอง
Caleb

1
ฉันเห็นด้วยกับสิ่งนี้เช่นกัน แต่ฉันคิดว่า thiton ทำหน้าที่อธิบายได้ดีกว่า ขอบคุณสำหรับคำตอบ !
วิลเล็ม D'Haeseleer

3

ฉันคิดว่าวิธีที่ดีในการถ่ายทอดสิ่งนี้คือการมุ่งเน้นไปที่ผลลัพธ์สุดท้ายไม่ใช่การเปลี่ยนแปลงที่เกิดขึ้นกับชั้นเรียนเมื่อเวลาผ่านไป ดังนั้นแทนที่จะพูดว่า "ฉันโอเวอร์โหลด 'foo' กับ 'foo (พารามิเตอร์อื่น ๆ )'," คุณพูดว่า "foo เป็นฟังก์ชันที่โอเวอร์โหลดพร้อมกับ 'foo ()' และ 'foo (พารามิเตอร์อื่น ๆ )'"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.