ทำไมแอททริบิวต์ isDefined () จึงโอเวอร์โหลดเกินพิกัด


165

แรงบันดาลใจจากคำถาม SO ชั้น Attribute มีหลาย overloads สำหรับIsDefined ()วิธีการ Covered คือแอททริบิวต์ที่ใช้กับชุดประกอบ, โมดูล, MemberInfo, ParameterInfo MemberInfo โอเวอร์โหลดครอบคลุม PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo

ที่ดูแล AttributeTargets ส่วนใหญ่ ยกเว้นหนึ่ง biggy: ไม่มี overload สำหรับ Attribute.IsDefined (Type, Type) เพื่อให้คุณสามารถตรวจสอบว่ามีการกำหนดคุณลักษณะในชั้นเรียน หรือ struct, มอบหมายหรือ enum สำหรับเรื่องที่

ไม่ใช่ว่านี่เป็นปัญหาที่แท้จริง Type.GetCustomAttributes () สามารถแก้ไขได้ แต่ BlahInfo ทุกประเภทก็มีเช่นกัน ฉันสงสัยว่าขาดความสมมาตร ฉันไม่สามารถระบุได้ว่าทำไมสิ่งนี้จึงเป็นปัญหาสำหรับประเภท การคาดเดาปัญหามรดกไม่ได้อธิบายให้ฉันฟัง การมี ValueType ในการผสมอาจเป็นผู้นำ แต่ก็ไม่สมเหตุสมผล ฉันไม่ซื้อ "พวกเขาลืม" พวกเขาไม่เคยทำ

ทำไมโอเวอร์โหลดนี้ถึงหายไป

คำตอบ:


170

มีSystem.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)และเกิดขึ้นจากSystem.TypeSystem.Reflection.MemberInfo

แอสเซมบลีซึ่งเป็นคอนเทนเนอร์ระดับบนสุดของแอสเซมบลี. NET ใด ๆ มีอย่างน้อยหนึ่งโมดูล แต่ละโมดูลนั้นมีประเภทและประเภทสามารถมีสมาชิกเช่นคุณสมบัติวิธีการหรือแม้กระทั่งประเภทอื่น ๆ (ประเภทซ้อนกัน) นั่นเป็นสาเหตุที่System.TypeมาจากMemberInfoแบบจำลองวัตถุที่อนุญาตให้ชนิดทำงานเป็นคอนเทนเนอร์สมาชิกทุกสิ่งรวมถึงชนิดอื่น ๆ


การบรรทุกเกินพิกัดสำหรับICustomAttributeProviderจะทำให้รู้สึกมากเกินไป
นายแอนเดอร์สัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.