คำถามติดแท็ก construction

3
เป็นการ“ เริ่มต้น”“ วิ่ง” หรือ“ ดำเนินการ” เป็นวิธีปฏิบัติที่ดีหรือไม่?
ฉันกำลังทำงานบนฐานรหัสที่มีหลายคลาสที่ใช้วิธีการเริ่มต้น ดูเหมือนว่าการก่อสร้างแบบสองเฟสสำหรับฉันซึ่งฉันถือว่าเป็นการปฏิบัติที่ไม่ดีอยู่เสมอ ฉันไม่สามารถบอกความแตกต่างระหว่างสิ่งนี้กับตัวสร้างได้ เมื่อใดจึงเหมาะสมที่จะใช้วิธีการเริ่มต้นแทนการสร้างวัตถุปกติ เมื่อใดฉันจึงควรใช้ตัวสร้าง แก้ไข: ฉันไม่คิดว่ามันเป็นสิ่งที่เกี่ยวข้อง แต่ภาษาการเขียนโปรแกรมคือ C # ซึ่งสามารถนำไปใช้กับ Java หรือ C ++ ได้อย่างเท่าเทียมกัน

6
สร้างวัตถุใหม่หรือรีเซ็ตคุณสมบัติทั้งหมดหรือไม่
public class MyClass { public object Prop1 { get; set; } public object Prop2 { get; set; } public object Prop3 { get; set; } } สมมติว่าผมมีวัตถุmyObjectของMyClassและฉันต้องการที่จะตั้งค่าคุณสมบัติของมันก็จะดีกว่าการสร้างวัตถุใหม่หรือมอบหมายแต่ละคุณสมบัติ? สมมติว่าฉันไม่มีการใช้เพิ่มเติมใด ๆ กับอินสแตนซ์เก่า myObject = new MyClass(); หรือ myObject.Prop1 = null; myObject.Prop2 = null; myObject.Prop3 = null;

5
แนวคิดของคลาสเปลี่ยนไปอย่างไรเมื่อส่งข้อมูลไปยังตัวสร้างแทนพารามิเตอร์เมธอด?
สมมติว่าเรากำลังแยกวิเคราะห์ การใช้งานอย่างหนึ่งอาจ: public sealed class Parser1 { public string Parse(string text) { ... } } หรือเราสามารถส่งข้อความไปยังผู้สร้างได้: public sealed class Parser2 { public Parser2(string text) { this.text = text; } public string Parse() { ... } } การใช้งานเป็นเรื่องง่ายในทั้งสองกรณี แต่การเปิดใช้งานพารามิเตอร์อินพุตเมื่อเปรียบเทียบกับกรณีอื่น ๆหมายความว่าParser1อย่างไร ฉันได้ส่งข้อความอะไรถึงเพื่อนนักเขียนโปรแกรมเมื่อพวกเขาดู API นอกจากนี้ยังมีข้อดี / ข้อเสียด้านเทคนิคในบางกรณีหรือไม่? คำถามอื่นเกิดขึ้นเมื่อฉันตระหนักว่าอินเทอร์เฟซจะค่อนข้างไม่มีความหมายในการใช้งานที่สอง: public interface IParser { string …

3
การใช้การแปลงอาร์กิวเมนต์โดยนัยถือว่าเป็นอันตรายหรือไม่
C ++ มีคุณสมบัติ (ฉันไม่สามารถหาชื่อที่ถูกต้องได้) ซึ่งเรียกการสร้างพารามิเตอร์ที่ตรงกันโดยอัตโนมัติหากประเภทอาร์กิวเมนต์ไม่ใช่ประเภทที่คาดไว้ ตัวอย่างพื้นฐานของสิ่งนี้คือการเรียกใช้ฟังก์ชันที่คาดว่าจะstd::stringมีconst char*อาร์กิวเมนต์ คอมไพเลอร์จะสร้างรหัสโดยอัตโนมัติเพื่อเรียกใช้std::stringConstructor ที่เหมาะสม ฉันสงสัยว่ามันดีสำหรับการอ่านอย่างที่คิดหรือไม่? นี่คือตัวอย่าง: class Texture { public: Texture(const std::string& imageFile); }; class Renderer { public: void Draw(const Texture& texture); }; Renderer renderer; std::string path = "foo.png"; renderer.Draw(path); ไม่เป็นไรใช่ไหม หรือมันไปไกลเกินไป? ถ้าฉันไม่ควรทำฉันจะทำให้ Clang หรือ GCC เตือนได้ไหม?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.