ตอนนี้ฉันกำลังเรียน C # และฉันกำลังพยายามหาวิธีที่ดีที่สุดในการทำสิ่งต่างๆ ฉันมาจากพื้นหลัง Java ดังนั้นฉันจึงคุ้นเคยกับแนวทางปฏิบัติที่ดีที่สุดของ Java เท่านั้น ฉันเป็นมือใหม่ C #!
ใน Java ถ้าฉันมีทรัพย์สินส่วนตัวฉันทำสิ่งนี้
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
ใน C # ฉันเห็นว่ามีหลายวิธีในการทำเช่นนี้
ฉันทำได้เหมือน Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
หรือฉันสามารถทำได้ด้วยวิธีนี้:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
หรือ:
public string Name { get; set; }
ฉันควรใช้ข้อใดและข้อควรระวังหรือรายละเอียดปลีกย่อยที่เกี่ยวข้องกับแต่ละแนวทางคืออะไร เมื่อสร้างคลาสฉันกำลังทำตามแนวทางปฏิบัติทั่วไปที่ดีที่สุดที่ฉันรู้จักจาก Java (โดยเฉพาะการอ่าน Effective Java) ตัวอย่างเช่นฉันชอบการไม่เปลี่ยนรูป (ให้ตัวตั้งค่าเมื่อจำเป็นเท่านั้น) ฉันแค่อยากรู้ว่าแนวทางปฏิบัติเหล่านี้เข้ากับวิธีการต่างๆในการจัดหา setters และ getters ใน C # ได้อย่างไร โดยพื้นฐานแล้วฉันจะแปลแนวทางปฏิบัติที่ดีที่สุดจากโลก Java เป็น C # ได้อย่างไร
แก้ไข
ฉันโพสต์สิ่งนี้เป็นความคิดเห็นสำหรับคำตอบของ Jon Skeet แต่มันก็ยาว:
สิ่งที่เกี่ยวกับคุณสมบัติที่ไม่สำคัญ (เช่นอาจมีการประมวลผลและการตรวจสอบที่สำคัญ)? ฉันยังสามารถเปิดเผยผ่านทรัพย์สินสาธารณะได้ แต่ด้วยตรรกะที่ห่อหุ้มget
และset
? เหตุใดฉันจึง / ควรทำเช่นนี้โดยมีเมธอด setter และ getter เฉพาะ (พร้อมด้วยตรรกะการประมวลผลและการตรวจสอบที่เกี่ยวข้อง)