แนะนำวิธีปฏิบัติที่ดีที่สุดในการสร้างคลาสคงที่


25

มีการถกเถียงกันระหว่างสมาชิกในทีมของฉันเกี่ยวกับการประกาศค่าคงที่ เรากำลังเคลื่อนย้ายตัวแปรคงที่ไปยังคลาสที่แยกจากกันดังนี้

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

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


ไม่ว่าคุณจะไปอะไรสิ่งหนึ่งที่ควรคำนึงถึงคือการใช้อินเทอร์เฟซในระบบแทนค่าคงที่คลาสเพื่อหลีกเลี่ยงการพึ่งพาระหว่างวัตถุและคลาสประเภท "Global"
dreza

ดังนั้นคุณเห็นด้วยกับการทำให้คลาสคงที่และเพียงแค่ถามว่าคุณควรเพิ่มนวกรรมิกคงที่ตอนนี้หรือภายหลัง? ฉันไม่เห็นความเห็นที่ตรงข้ามกับคำถามของคุณโปรดอธิบาย
Doc Brown


2
ฉันไม่ได้รับคำถามของคุณ staticถ้าชั้นไม่มีสมาชิกเช่นคุณสามารถทำเครื่องหมาย นี่คือมุมฉากอย่างสมบูรณ์กับการมีหรือไม่มีตัวสร้างแบบคงที่
CodesInChaos

1
ค่าคงที่ของคุณเป็นค่าคงที่ในความหมายทางคณิตศาสตร์หรือนี่คือรูปแบบของการกำหนดค่าหรือไม่?
CodesInChaos

คำตอบ:


31

ยังไม่ชัดเจนว่าคำถามของคุณคืออะไร แต่ถ้าค่าคงที่อย่างแท้จริงฉันไม่เห็นปัญหาเกี่ยวกับตัวเลือกง่าย ๆ ของ:

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

การใช้staticในการประกาศชั้นเรียนเป็นการแสดงเจตนาของคุณเพื่อจุดประสงค์ของชั้นเรียนนี้

Marc Gravell อธิบายบางส่วนของปัญหาที่อาจเกิดขึ้นกับค่าคงที่ในคำตอบนี้กองมากเกิน มีเพียงคุณเท่านั้นที่จะรู้ว่าสิ่งเหล่านี้เป็นปัญหาใน codebase ของคุณหรือไม่ แต่หากค่าสามารถเปลี่ยนแปลงได้ให้ใช้public static readonlyแทนconstมิฉะนั้นรหัสใด ๆ ที่อ้างถึงค่าคงที่จะต้องถูกสร้างใหม่หากค่าเปลี่ยนแปลง


1
หนึ่งในคำเตือนที่คุณสามารถหาได้โดยใช้ตัวแปร const คือการอธิบายอย่างชัดเจนที่นี่ เนื่องจากโค้ดเบสมีแนวโน้มที่จะเติบโตและมีความซับซ้อนมากขึ้นจึงควรหลีกเลี่ยงการใช้constงานดังนั้นการเพิ่มประสิทธิภาพจึงไม่คุ้มกับความเสี่ยงของปัญหาที่อาจเกิดขึ้นในอนาคต IMHO ฉันชอบที่จะใช้public static readonlyตัวแปรสำหรับค่าคงที่
joanlofe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.