นี่คือข้อโต้แย้งบางประการสำหรับคุณสมบัติและข้อโต้แย้งของฉัน:
ใช้งานง่ายกว่าการเขียนวิธี getter และ setter
คู่ของ Getter และ setter เป็นกลิ่นของโค้ด การทำให้ง่ายต่อการเขียนสิ่งเหล่านี้ก็เหมือนกับการทำให้ล้มเหลวในการทดสอบคณิตศาสตร์โดยใช้แบบฟอร์ม Scantron และเติมใน 'C's ทั้งหมด วัตถุที่มีเพียงสถานะสำหรับการคงอยู่ไม่ควรใช้ getters / setters และควรสร้างวัตถุที่ไม่เปลี่ยนรูปในเวลาที่มีอยู่
สิ่งที่สำคัญสำหรับผู้บริโภคของวัตถุคือสิ่งที่มันทำไม่ได้เป็นอย่างไร พฤติกรรมของมันคือสิ่งที่มันทำ; สถานะของมันเป็นอย่างไร หากคุณพบว่าตัวเองสนใจเกี่ยวกับสถานะของวัตถุ (ยกเว้นการคงอยู่แม้ว่าสิ่งนี้จะทำลาย OO) คุณก็ไม่ได้ทำ OOP และสูญเสียข้อดีของมัน
พวกเขาให้ข้อบ่งชี้ประสิทธิภาพอย่างคร่าว ๆ กับผู้บริโภค
นี่คือสิ่งที่สามารถเปลี่ยนแปลงได้ในอนาคตสำหรับอสังหาริมทรัพย์ใด ๆ ก็ตาม สมมติว่าในรีลีส 1.0 การเข้าถึง PropertyX จะส่งคืนฟิลด์ ในรีลีส 1.5 หากฟิลด์เป็นโมฆะ PropertyX จะใช้รูปแบบวัตถุ Null เพื่อสร้างวัตถุ null ใหม่ ในรุ่น 2.0 ฟิลด์จะได้รับการตรวจสอบเพิ่มเติมโดยวิธี getter ใน PropertyX
เนื่องจากคุณสมบัติมีความซับซ้อนมากขึ้นการบ่งชี้ประสิทธิภาพของการใช้คุณสมบัติจึงดูเหมือนจะน้อยลงเรื่อย ๆ
มันดีกว่าทุ่งสาธารณะ
นี่เป็นเรื่องจริง แต่เป็นวิธีการ
พวกเขาเป็นตัวแทนด้านที่แตกต่างกันโดยพื้นฐานของวัตถุกว่าวิธีการและผู้บริโภคของวัตถุควรใส่ใจเกี่ยวกับเรื่องนี้
คุณแน่ใจหรือว่าข้อความทั้งสองข้างต้นเป็นจริง
พวกเขาพิมพ์ง่ายกว่าผู้ชาย
แน่นอนว่าการพิมพ์myObject.Length
นั้นง่ายกว่าการพิมพ์myObject.Length()
แต่ไม่สามารถแก้ไขได้ด้วยน้ำตาลประโยคเล็กน้อย
ทำไมต้องใช้วิธีการแทนคุณสมบัติ?
ไม่รับประกันประสิทธิภาพ API จะยังคงเป็นจริงแม้ว่าวิธีการจะซับซ้อนมากขึ้น ผู้บริโภคจะต้องโปรไฟล์รหัสของพวกเขาหากพวกเขากำลังทำงานในปัญหาประสิทธิภาพการทำงานและไม่พึ่งพา word-of-API
น้อยกว่าสำหรับผู้บริโภคที่จะคิดเกี่ยวกับ สถานที่ให้บริการนี้มี setter หรือไม่? วิธีการที่แน่นอนไม่ได้
ผู้บริโภคกำลังคิดถึง OOP ที่เหมาะสม ในฐานะผู้บริโภค API ฉันสนใจที่จะโต้ตอบกับพฤติกรรมของวัตถุ เมื่อฉันเห็นคุณสมบัติใน API มันดูเหมือนเป็นสถานะมาก ในความเป็นจริงถ้าคุณสมบัติทำมากเกินไปพวกเขาไม่ควรจะเป็นคุณสมบัติด้วยซ้ำดังนั้นคุณสมบัติใน API เป็นสถานะที่ปรากฏแก่ผู้บริโภค
โปรแกรมเมอร์ของ API จะคิดอย่างลึกซึ้งยิ่งขึ้นเกี่ยวกับวิธีการที่มีค่าส่งคืนและหลีกเลี่ยงการแก้ไขสถานะของวัตถุในวิธีการดังกล่าวถ้าเป็นไปได้ ควรแยกการบังคับใช้คำสั่งจากเคียวรีหากทำได้
ดังนั้นฉันถามคุณว่าทำไมใช้คุณสมบัติแทนวิธีการ? จุดส่วนใหญ่ในMSDNนั้นเป็นรหัสที่มีกลิ่นและอยู่ในตัวเองและไม่ได้อยู่ในคุณสมบัติหรือวิธีการใด ๆ
(ความคิดเหล่านี้มาถึงฉันหลังจากคิดถึง CQS)
type GetFoo() void SetFoo()
หมื่นครั้ง ตลอดเวลาที่ฉันเขียนรหัส C # ฉันไม่เคยสับสนกับทรัพย์สิน