คำถามติดแท็ก getter-setter

วิธีการกลายพันธุ์สาธารณะในการเขียนโปรแกรมเชิงวัตถุซึ่งรับผิดชอบในการเปลี่ยนและคืนค่าของสมาชิกคลาสส่วนตัวจึงเป็นไปตามหลักการของการห่อหุ้ม

13
ใช้ @property กับ getters และ setters
นี่เป็นคำถามออกแบบเฉพาะของ Python: class MyClass(object): ... def get_my_attr(self): ... def set_my_attr(self, value): ... และ class MyClass(object): ... @property def my_attr(self): ... @my_attr.setter def my_attr(self, value): ... Python ช่วยให้เราสามารถทำอย่างใดอย่างหนึ่ง หากคุณต้องการออกแบบโปรแกรม Python คุณจะใช้แนวทางใดและทำไม

7
pythonic เป็นวิธีการใช้ getters และ setters อะไร
ฉันทำมันเหมือน: def set_property(property,value): def get_property(property): หรือ object.property = value value = object.property ฉันใหม่กับ Python ดังนั้นฉันยังคงสำรวจไวยากรณ์อยู่และฉันต้องการคำแนะนำในการทำสิ่งนี้

11
ผู้ได้รับทรัพย์สินและผู้ตั้งถิ่นฐาน
ด้วยคลาสแบบง่ายนี้ฉันได้รับคำเตือนคอมไพเลอร์ กำลังพยายามแก้ไข / เข้าถึงxภายใน setter / getter ของตนเอง และเมื่อฉันใช้มันเช่นนี้ var p: point = Point() p.x = 12 ฉันได้รับ EXC_BAD_ACCESS ฉันจะทำสิ่งนี้ได้อย่างไรถ้าไม่มี ivars สำรองอย่างชัดเจน class Point { var x: Int { set { x = newValue * 2 //Error } get { return x / 2 //Error } } // ... }

8
ไม่สามารถใช้สมาชิกอินสแตนซ์ในประเภท
ฉันมีคลาสต่อไปนี้: class ReportView: NSView { var categoriesPerPage = [[Int]]() var numPages: Int = { return categoriesPerPage.count } } การคอมไพล์ล้มเหลวด้วยข้อความ: ไม่สามารถใช้สมาชิกอินสแตนซ์ 'categoryPerPage' กับประเภท 'ReportView' สิ่งนี้หมายความว่า?

16
เหตุใดจึงเป็นไปไม่ได้ที่จะแทนที่คุณสมบัติ getter เท่านั้นและเพิ่มตัวตั้งค่า [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ทำไมรหัส C # ต่อไปนี้ไม่ได้รับอนุญาต: public abstract class BaseClass { public abstract int Bar { get;} } public class ConcreteClass : BaseClass { public override int Bar { get { return 0; } set {} } } CS0546 'ConcreteClass.Bar.set': ไม่สามารถแทนที่ได้เนื่องจาก 'BaseClass.Bar' ไม่มี accessor …

2
คุณจะใช้ setter ส่วนตัวอย่างไรเมื่อใช้อินเตอร์เฟส?
ฉันได้สร้างส่วนต่อประสานที่มีคุณสมบัติบางอย่าง หากอินเตอร์เฟสนั้นไม่มีอยู่คุณสมบัติทั้งหมดของอ็อบเจ็กต์คลาสจะถูกตั้งค่าเป็น { get; private set; } อย่างไรก็ตามสิ่งนี้ไม่ได้รับอนุญาตเมื่อใช้อินเทอร์เฟซดังนั้นจะสามารถทำได้และหากเป็นเช่นนั้นได้อย่างไร

4
เป็นไปได้หรือไม่ที่จะใช้ตัวรับสัญญาณ / ตัวตั้งค่าแบบไดนามิกใน JavaScript
ฉันรู้วิธีสร้าง getters และ setters สำหรับคุณสมบัติที่มีชื่ออยู่แล้วโดยทำสิ่งนี้: // A trivial example: function MyObject(val){ this.count = 0; this.value = val; } MyObject.prototype = { get value(){ return this.count < 2 ? "Go away" : this._value; }, set value(val){ this._value = val + (++this.count); } }; var a = new MyObject('foo'); alert(a.value); // --> …

9
c #: getter / setter
ฉันเห็นบางอย่างต่อไปนี้ที่ไหนสักแห่งและสงสัยว่ามันหมายถึงอะไร ฉันรู้ว่าพวกเขาเป็น getters และ setters แต่อยากรู้ว่าทำไมถึงกำหนด string Type แบบนี้ ขอบคุณทีช่วยฉัน. public string Type { get; set; }
109 c#  getter-setter 

9
เป็นไปได้ไหมที่จะอ่านค่าของคำอธิบายประกอบใน java?
นี่คือรหัสของฉัน: @Column(columnName="firstname") private String firstName; @Column(columnName="lastname") private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } เป็นไปได้ไหมที่จะอ่านค่าคำอธิบายประกอบ @Column ของฉัน ( columnName = "xyz123") ในคลาสอื่น

7
ฉันจะเขียนทับเมธอด getter ในโมเดล ActiveRecord ได้อย่างไร
ฉันพยายามเขียนทับเมธอด getter สำหรับโมเดล ActiveRecord ฉันมีแอตทริบิวต์ที่เรียกว่าnameในโมเดลCategoryและฉันต้องการที่จะทำสิ่งนี้: def name name_trans || name end หากname_transแอตทริบิวต์ไม่ใช่ศูนย์ให้ส่งคืนหรือส่งคืนnameแอตทริบิวต์ ฉันจะทำอย่างไร สิ่งนี้ควรถูกเรียกตามปกติดังนี้: @category.name

12
แนวทางปฏิบัติที่ดีที่สุดของ Getters, setters และ Properties Java กับ C #
ตอนนี้ฉันกำลังเรียน 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 = …

6
Getters and Setters ใน Kotlin
ตัวอย่างเช่นใน Java ฉันสามารถเขียน getters ด้วยตัวเอง (สร้างโดย IDE) หรือใช้คำอธิบายประกอบเช่น @Getter ในลอมบอกซึ่งค่อนข้างง่าย Kotlin แต่มีgetters และ setters โดยค่าเริ่มต้น แต่ฉันไม่เข้าใจวิธีใช้ ฉันต้องการทำเช่นนั้น - คล้ายกับ Java: private val isEmpty: String get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility. แล้ว getters ทำงานอย่างไร?

1
ค่าของคีย์เวิร์ด `this` ของฟังก์ชันนี้คืนมาจาก getter
ฉันพบค่าที่ไม่คาดคิดของคำค้นหานี้ในตัวอย่างต่อไปนี้ let x = { z : 10 , get func1() { return function(v) { console.log(this === v); } } } x.func1(x) เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล ค่าของคีย์เวิร์ดนี้คือ object xราวกับว่ามันถูกเรียกใช้จากอ็อบเจกต์นั้นฉันคาดหวังเฉพาะฟังก์ชัน getที่มีคีย์เวิร์ดนี้เท่ากับการเรียก object x ตัวอย่างนี้แสดงให้เราเห็นถึงความแตกต่าง let x = { func2() { return function(v) { console.log(this === v); } } } x.func2()(x); เรียกใช้ข้อมูลโค้ดซ่อนผลลัพธ์ขยายตัวอย่างข้อมูล ในตัวอย่างทั้งสองfunc1ซึ่งเป็นฟังก์ชั่น getter และfunc2ซึ่งเป็นวิธีการของวัตถุจะถูกดำเนินการจากวัตถุxและจากนั้นฟังก์ชั่นที่ส่งคืนจะถูกดำเนินการ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.