ทางเลือกการแก้ปัญหา
ใน บริษัท ของเราเราหลีกเลี่ยง "การกระโดดข้ามโครงการ" เพื่อไปยังโครงการระดับล่างทั่วไป ตัวอย่างเช่นเลเยอร์การนำเสนอ / API ของเราสามารถอ้างอิงชั้นโดเมนของเราเท่านั้นและชั้นโดเมนสามารถอ้างอิงชั้นข้อมูลได้เท่านั้น
อย่างไรก็ตามนี่เป็นปัญหาเมื่อมีจำนวน enums ที่ต้องมีการอ้างอิงโดยทั้งงานนำเสนอและชั้นโดเมน
นี่คือทางออกที่เราได้ดำเนินการ (จนถึงปัจจุบัน) มันเป็นทางออกที่ดีและทำงานได้ดีสำหรับเรา คำตอบอื่น ๆ ที่ถูกตีรอบนี้
หลักฐานพื้นฐานคือ enums ไม่สามารถสืบทอดได้ แต่คลาสสามารถทำได้ ดังนั้น...
// In the lower level project (or DLL)...
public abstract class BaseEnums
{
    public enum ImportanceType
    {
        None = 0,
        Success = 1,
        Warning = 2,
        Information = 3,
        Exclamation = 4
    }
    [Flags]
    public enum StatusType : Int32
    {
        None = 0,
        Pending = 1,
        Approved = 2,
        Canceled = 4,
        Accepted = (8 | Approved),
        Rejected = 16,
        Shipped = (32 | Accepted),
        Reconciled = (64 | Shipped)
    }
    public enum Conveyance
    {
        None = 0,
        Feet = 1,
        Automobile = 2,
        Bicycle = 3,
        Motorcycle = 4,
        TukTuk = 5,
        Horse = 6,
        Yak = 7,
        Segue = 8
    }
จากนั้นไปที่ "รับช่วง" จำนวนอื่นในโครงการระดับที่สูงขึ้น ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
   private SubEnums()
   {}
}
นี่เป็นข้อได้เปรียบที่แท้จริงสามข้อ ...
- คำจำกัดความ enum จะเหมือนกันโดยอัตโนมัติในทั้งสองโครงการ - ตามคำจำกัดความ 
- การเปลี่ยนแปลงใด ๆ ในนิยาม enum จะถูกสะท้อนในวินาทีโดยอัตโนมัติโดยไม่ต้องทำการแก้ไขใด ๆ กับคลาสที่สอง
- enums นั้นใช้รหัสเดียวกัน - ดังนั้นจึงสามารถเปรียบเทียบค่าได้อย่างง่ายดาย (กับคำเตือน)
ในการอ้างอิง enums ในโครงการแรกคุณสามารถใช้คำนำหน้าของคลาส: BaseEnums.StatusType.Pendingหรือเพิ่ม"การใช้ BaseEnums แบบคงที่"คำสั่งการใช้งานของคุณ
ในโครงการที่สองเมื่อจัดการกับคลาสที่สืบทอดมา แต่ฉันไม่สามารถใช้วิธี "ใช้ static ... " ในการทำงานดังนั้นการอ้างอิงทั้งหมดกับ "สืบทอดมา enums" จะนำหน้าด้วยคลาสเช่นSubEnums.StatusType.Pending . หากใครมาพร้อมกับวิธีการอนุญาตให้"ใช้คงที่"ในโครงการที่สองแจ้งให้เราทราบ
ฉันแน่ใจว่านี่สามารถปรับแต่งเพื่อให้ดียิ่งขึ้น - แต่มันใช้งานได้จริงและฉันได้ใช้วิธีการนี้ในโครงการทำงาน
โปรดโหวตสิ่งนี้ถ้าคุณเห็นว่ามีประโยชน์