ความแตกต่างระหว่างสิ่งนั้นและเพียงแค่สร้างวิธีการที่ได้รับรายการหรืออาร์เรย์คืออะไร
ความแตกต่างระหว่าง
void M(params int[] x)
และ
void N(int[] x)
คือว่า M อาจถูกเรียกเช่นนี้:
M(1, 2, 3)
หรือเช่นนี้
M(new int[] { 1, 2, 3 });
แต่ N อาจถูกเรียกในวิธีที่สองเท่านั้นไม่ใช่วิธีแรก
บางทีมันอาจมีผลกระทบต่อประสิทธิภาพบ้างไหม?
ผลกระทบต่อประสิทธิภาพคือไม่ว่าคุณจะเรียกใช้M
ในวิธีแรกหรือวิธีที่สองไม่ว่าคุณจะสร้างอาร์เรย์ขึ้นมาก็ตาม การสร้างอาร์เรย์มีผลกระทบต่อประสิทธิภาพเนื่องจากต้องใช้ทั้งเวลาและหน่วยความจำ โปรดจำไว้ว่าควรวัดผลกระทบของประสิทธิภาพต่อเป้าหมายประสิทธิภาพ; ไม่น่าเป็นไปได้ที่ค่าใช้จ่ายในการสร้างอาเรย์พิเศษเป็นปัจจัยที่ทำให้เกิดความแตกต่างระหว่างความสำเร็จและความล้มเหลวในตลาด
ฉันไม่เข้าใจหรือเห็นอย่างถ่องแท้ว่าคุณต้องการให้มีพารามิเตอร์แบบไม่ จำกัด จำนวนเท่าใด
เป็นความสะดวกสบายอย่างแท้จริงและสมบูรณ์สำหรับผู้เขียนโค้ดที่เรียกใช้เมธอดนั้น มันสั้นและง่ายต่อการเขียน
M(1, 2, 3);
แทนที่จะเขียน
M(new int[] { 1, 2, 3 });
มันช่วยประหยัดการกดปุ่มเพียงไม่กี่ครั้งที่ฝั่งผู้โทร นั้นคือทั้งหมด.
คำถามสองสามข้อที่คุณไม่ได้ถาม แต่อาจต้องการทราบคำตอบ:
คุณสมบัตินี้เรียกว่าอะไร?
วิธีการที่ช่วยให้จำนวนตัวแปรของการขัดแย้งที่จะผ่านในด้านผู้โทรจะเรียกว่าvariadic วิธีการพารามิเตอร์เป็นวิธีการที่ C # ใช้วิธีการแปรปรวน
การแก้ไขการโอเวอร์โหลดทำงานอย่างไรกับวิธีการแปรปรวน?
เมื่อต้องเผชิญกับปัญหาการแก้ปัญหาการโอเวอร์โหลด C # จะพิจารณาทั้งแบบฟอร์ม "ปกติ" และ "ขยาย" และรูปแบบ "ปกติ" จะชนะถ้าทั้งคู่ใช้ได้ ตัวอย่างเช่นพิจารณาสิ่งนี้:
void P(params object[] x){}
และเรามีสาย
P(null);
มีสองความเป็นไปได้ที่เกี่ยวข้อง ในรูปแบบ "ปกติ" เราเรียกP
และผ่านการอ้างอิงเป็นโมฆะสำหรับอาร์เรย์ ใน "ขยาย" P(new object[] { null })
รูปแบบที่เราเรียกว่า ในกรณีนี้แบบฟอร์มปกติชนะ หากเรามีการโทรP(null, null)
แบบฟอร์มปกติจะไม่สามารถใช้ได้และแบบฟอร์มที่ชนะจะขยายไปตามค่าเริ่มต้น
ท้าทาย : สมมติว่าเรามีและโทรvar s = new[] { "hello" };
P(s);
อธิบายสิ่งที่เกิดขึ้นที่ไซต์การโทรและสาเหตุ คุณอาจประหลาดใจ!
ท้าทาย : สมมติว่าเรามีทั้งสองและvoid P(object x){}
void P(params object[] x){}
สิ่งที่ไม่P(null)
ทำและทำไม?
ท้าทาย : สมมติว่าเรามีทั้งสองและvoid M(string x){}
void M(params string[] x){}
สิ่งที่ไม่M(null)
ทำและทำไม? สิ่งนี้แตกต่างจากกรณีก่อนหน้าอย่างไร