C # คุณสมบัติ (Attribute)
ลักษณะ (Attribute) เป็นโปรแกรมสำหรับถ่ายโอนองค์ประกอบต่างๆ (เช่นการเรียนวิธีการโครงสร้าง enumerations, ส่วนประกอบอื่น ๆ ) ในลักษณะการทำงานเวลาทำงานของข้อมูลของแท็กเปิดเผยคุณสามารถเพิ่มข้อมูลที่เปิดเผยในการเขียนโปรแกรมโดยใช้คุณลักษณะ ฉลากคำสั่งถูกนำไปใช้โดยการวางไว้ในด้านหน้าขององค์ประกอบในวงเล็บ ([]) เพื่ออธิบาย
ลักษณะ (Attribute) เพื่อเพิ่มเมตาดาต้าเช่นคำแนะนำและความคิดเห็นของคอมไพเลอร์, คำอธิบายวิธีการข้อมูลเพิ่มเติมและอื่น ๆ .NET Framework ที่มีสองประเภทของคุณสมบัติ:คุณสมบัติที่กำหนดไว้ล่วงหน้าและคุณสมบัติที่กำหนดเอง
คุณสมบัติที่กำหนดไว้ (Attribute)
คุณสมบัติที่กำหนดไว้ (Attribute) ไวยากรณ์ต่อไปนี้:
[แอตทริบิวต์ (positional_parameters, name_parameter = ค่า, ... )] ธาตุ
ลักษณะชื่อและค่า (Attribute) ที่ระบุไว้ภายในวงเล็บวางไว้ก่อนองค์ประกอบที่จะนำไปใช้ positional_parameters ที่กำหนดไว้ข้อมูลที่จำเป็น, name_parameter ที่กำหนดไว้ข้อมูลทางเลือก
แอตทริบิวต์ที่กำหนดไว้ล่วงหน้า (Attribute)
.NET Framework ที่มีสามคุณลักษณะที่กำหนดไว้ล่วงหน้า:
- AttributeUsage
- เงื่อนไข
- ล้าสมัย
AttributeUsage
ที่กำหนดไว้ล่วงหน้าแอตทริบิวต์AttributeUsage อธิบายวิธีการใช้ชั้นแอตทริบิวต์ที่กำหนดเองมันระบุชนิดของคุณสมบัติที่สามารถนำไปใช้กับโครงการ
บทบัญญัติของคุณลักษณะนี้มีไวยากรณ์ต่อไปนี้:
[AttributeUsage ( validon, AllowMultiple = allowmultiple, ได้รับมรดกสืบทอดมา = )]
ประเด็น:
- พารามิเตอร์ที่กำหนดไว้ Validon องค์ประกอบภาษาลักษณะที่สามารถวาง มันคือการรวมของมูลค่า enumeratorsAttributeTargetsค่าเริ่มต้นคือAttributeTargets.All
- พารามิเตอร์allowmultiple (ถ้ามี)ให้ค่าบูลีนสำหรับทรัพย์สินAllowMultipleทรัพย์สิน (ทรัพย์สิน) ถ้าเป็นจริงแล้วคุณลักษณะนี้จะมีประโยชน์มากขึ้น ค่าเริ่มต้นเป็นเท็จ (ใช้เพียงครั้งเดียว)
- พารามิเตอร์ที่สืบทอดมา (ถ้ามี)ให้ค่าบูลีนสำหรับอสังหาริมทรัพย์สืบทอด (ทรัพย์สิน) ถ้าเป็นจริงแห่งนี้เป็นคลาสที่ได้รับสามารถสืบทอด ค่าเริ่มต้นเป็นเท็จ (ไม่ได้รับมรดก)
ตัวอย่างเช่น:
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
เงื่อนไข
คุณลักษณะนี้นับเป็นวิธีการเงื่อนไขที่กำหนดไว้ล่วงหน้าการดำเนินงานขึ้นอยู่กับตัวระบุ preprocessing ด้านบน
ก็จะทำให้เกิดการสะสมตามเงื่อนไขของสายวิธีการขึ้นอยู่กับค่าที่ระบุเช่นตรวจแก้จุดบกพร่องหรือ Traceยกตัวอย่างเช่นค่าของตัวแปรจะปรากฏขึ้นเมื่อการแก้จุดบกพร่องรหัส
บทบัญญัติของคุณลักษณะนี้มีไวยากรณ์ต่อไปนี้:
[เงื่อนไข ( conditionalSymbol )]
ตัวอย่างเช่น:
[เงื่อนไข ( "แก้ปัญหา")]
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงคุณลักษณะนี้:
DEBUG #define การใช้ระบบ using System.Diagnostics; MyClass class สาธารณะ { [เงื่อนไข ( "แก้ปัญหา")] ข้อความสาธารณะคงเป็นโมฆะ (String MSG) { Console.WriteLine (MSG); } } ทดสอบระดับ { เป็นโมฆะคง Function1 () { Myclass.Message ( "ในการทำงาน 1. "); function2 (); } เป็นโมฆะคง function2 () { Myclass.Message ( "ในการทำงาน 2. "); } ประชาชนเป็นโมฆะคง Main () { Myclass.Message ( "ในฟังก์ชั่นหลัก."); Function1 (); Console.ReadKey (); } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ในฟังก์ชั่นหลัก ในฟังก์ชั่น 1 ในฟังก์ชั่น 2
ล้าสมัย
แอตทริบิวต์ที่กำหนดไว้ล่วงหน้าแท็กหน่วยงานโปรแกรมไม่ควรใช้ จะช่วยให้คุณบอกคอมไพเลอร์จะทิ้งองค์ประกอบเป้าหมายโดยเฉพาะอย่างยิ่ง ตัวอย่างเช่นเมื่อวิธีการใหม่ที่ถูกนำมาใช้ในชั้นเรียน แต่คุณยังคงต้องการที่จะให้ชั้นเรียนในวิธีการเก่าคุณสามารถแสดงวิธีการใหม่ควรจะนำมาใช้แทนวิธีการเก่าของข้อความที่จะทำเครื่องหมายว่าล้าสมัย (ล้าสมัย ก)
บทบัญญัติของคุณลักษณะนี้มีไวยากรณ์ต่อไปนี้:
[เลิก ( ข่าวสาร )] [เลิก ( ข้อความ ISERROR )]
ประเด็น:
- ข้อความพารามิเตอร์เป็นสตริงที่อธิบายถึงโครงการเช่นเดียวกับเหตุผลที่ว่าทำไมสิ่งที่ล้าสมัยใช้ทางเลือก
- พารามิเตอร์ISERROR เป็นค่าบูลีนถ้าเป็นจริงคอมไพเลอร์ควรใช้โครงการเป็นความผิดพลาด ค่าเริ่มต้นเป็นเท็จ (คอมไพเลอร์สร้างเตือน)
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงคุณลักษณะนี้:
การใช้ระบบ MyClass class สาธารณะ { [เลิก ( "อย่าใช้ OldMethod ใช้ NewMethod แทน" จริง)] เป็นโมฆะคง OldMethod () { Console.WriteLine ( "มันเป็นวิธีเก่า"); } เป็นโมฆะคง NewMethod () { Console.WriteLine ( "มันเป็นวิธีการใหม่"); } ประชาชนเป็นโมฆะคง Main () { OldMethod (); } }
เมื่อคุณพยายามที่จะรวบรวมโปรแกรมคอมไพเลอร์ที่จะทำให้ข้อผิดพลาดเซน:
อย่าใช้ OldMethod ใช้ NewMethod แทน
แอตทริบิวต์ที่กำหนดเองสร้าง (Attribute)
.NET Framework ที่ช่วยให้คุณสร้างคุณสมบัติแบบกำหนดเองสำหรับการจัดเก็บข้อมูลที่เปิดเผยและสามารถเรียกดูได้ที่รันไทม์ ข้อมูลเหล่านี้จะขึ้นอยู่กับเกณฑ์การออกแบบและการประยุกต์ใช้จะต้องมีองค์ประกอบที่เกี่ยวข้องกับเป้าหมายใด ๆ
สร้างและใช้คุณสมบัติที่กำหนดเองรวมถึงขั้นตอนที่สี่:
- คุณสมบัติของคำสั่งที่กำหนดเอง
- สร้างคุณสมบัติแบบกำหนดเอง
- สมัครคุณสมบัติแบบกำหนดเองในองค์ประกอบโปรแกรมเป้าหมาย
- การเข้าถึงผ่านลักษณะการสะท้อน
ขั้นตอนสุดท้ายรวมถึงการเขียนโปรแกรมที่ง่ายต่อการอ่านข้อมูลเมตาจะหาสัญลักษณ์ต่างๆ เมตาดาต้าเป็นข้อมูลและข้อมูลที่ใช้ในการอธิบายข้อมูลอื่น ๆ โปรแกรมควรใช้สะท้อนการเข้าถึงคุณสมบัติที่รันไทม์ เราจะหารือในรายละเอียดในบทต่อไป
คุณสมบัติของคำสั่งที่กำหนดเอง
มีคุณสมบัติให้กำหนดเองใหม่จะได้รับจากระดับSystem.Attributeตัวอย่างเช่น:
แก้ไขข้อผิดพลาด // แอตทริบิวต์ที่กำหนดเองได้รับมอบหมายในชั้นเรียนและสมาชิก [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] DeBugInfo ระดับส่วนกลาง: System.Attribute
ในรหัสข้างต้นเราได้ประกาศแอตทริบิวต์ที่กำหนดเองที่มีชื่อของDeBugInfo
สร้างคุณสมบัติแบบกำหนดเอง
ให้เราสร้างแอตทริบิวต์ที่กำหนดเองที่มีชื่อว่าDeBugInfo ข้อมูลจะถูกเก็บไว้ในการดีบักคุณลักษณะที่ได้รับมันเก็บข้อมูลต่อไปนี้:
- หมายเลขรหัสข้อผิดพลาด
- นักพัฒนารู้จักชื่อของข้อผิดพลาดที่
- วันสุดท้ายของการตรวจสอบรหัส
- นักพัฒนาที่เก็บข้อความสตริงทำเครื่องหมาย
DeBugInfoสามชั้นแรกของเราจะนำไปใช้ในการจัดเก็บข้อมูลที่สามทรัพย์สินส่วนตัว (ทรัพย์สิน) และมีทรัพย์สินของประชาชนในการจัดเก็บข้อความ (ทรัพย์สิน) ดังนั้นชื่อหมายเลขข้อผิดพลาดของนักพัฒนาและวันที่ของการตรวจสอบจะต้องวางตำแหน่งระดับ DeBugInfo (ตำแหน่ง) พารามิเตอร์ข้อความเป็นชื่อตัวเลือก (ชื่อ) พารามิเตอร์
สถานที่ให้บริการแต่ละคนจะต้องมีอย่างน้อยหนึ่งตัวสร้าง ตำแหน่งที่ต้องการ (ตำแหน่ง) พารามิเตอร์ที่ควรจะผ่านไปได้โดยสร้าง รหัสต่อไปนี้แสดงให้เห็นถึงประเภทDeBugInfo:
แก้ไขข้อผิดพลาด // แอตทริบิวต์ที่กำหนดเองได้รับมอบหมายในชั้นเรียนและสมาชิก [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] DeBugInfo ระดับส่วนกลาง: System.Attribute { ส่วนตัว int Bugno; นักพัฒนา String เอกชน lastReview String เอกชน ข้อความสาธารณะ String; ประชาชน DeBugInfo (BG int สตริง dev สตริง D) { this.bugNo = BG; this.developer = dev; this.lastReview = d; } int สาธารณะ Bugno { ได้รับ { กลับ Bugno; } } ผู้พัฒนาสตริงสาธารณะ { ได้รับ { กลับนักพัฒนา; } } สาธารณะ String LastReview { ได้รับ { กลับ lastReview; } } สาธารณะ String ข้อความ { ได้รับ { ข้อความกลับมา } ชุด { ข้อความ value =; } } }
สมัครคุณสมบัติแบบกำหนดเอง
โดยการวางคุณสมบัติทันทีก่อนเป้าหมายที่จะใช้คุณลักษณะนี้:
[DeBugInfo (45, "ซาร่าอาลี", "2012/12/08" ข้อความ = "กลับไม่ตรงกันชนิด")] [DeBugInfo (49 "Nuha อาลี", "10/10/2012" ข้อความ = "ตัวแปรที่ไม่ได้ใช้")] ระดับสี่เหลี่ยมผืนผ้า { // ตัวแปรสมาชิกที่มีการป้องกันความยาวคู่ การป้องกันความกว้างคู่ สี่เหลี่ยมผืนผ้าสาธารณะ (L คู่คู่ W) { ความยาว = l; width = W; } [DeBugInfo (55, "ซาร่าอาลี", "19/10/2012" ข้อความ = "กลับไม่ตรงกันชนิด")] GetArea คู่สาธารณะ () { กลับความยาวความกว้าง *; } [DeBugInfo (56, "ซาร่าอาลี", "19/10/2012")] โมฆะสาธารณะจอแสดงผล () { Console.WriteLine ( "ความยาว: {0}", ความยาว); Console.WriteLine ( "ความกว้าง: {0}" กว้าง); Console.WriteLine ( "พื้นที่: {0}" GetArea ()); } }
ในบทต่อไปเราจะใช้วัตถุชั้นสะท้อนเพื่อดึงข้อมูลนี้