Latest web development tutorials
×

C# หลักสูตร

C# หลักสูตร C# แนะนำโดยย่อ C# สิ่งแวดล้อม C# โครงสร้างหลักสูตร C# ไวยากรณ์พื้นฐาน C# ชนิดข้อมูล C# ประเภทการแปลง C# ตัวแปร C# คงที่ C# ผู้ประกอบการ C# ผู้พิพากษา C# การไหลเวียน C# บรรจุภัณฑ์ C# ทาง C# ประเภท nullable C# แถว(Array) C# เชือก(String) C# โครงสร้าง(Struct) C# แจกแจง(Enum) C# หมวดหมู่(Class) C# สืบทอด C# polymorphism C# ดำเนินงานมาก C# อินเตอร์เฟซ(Interface) C# namespaces(Namespace) C# สั่ง preprocessor C# นิพจน์ปกติ C# การจัดการข้อยกเว้น C# input และ output ไฟล์

C# การสอนที่ทันสมัย

C# คุณสมบัติ(Attribute) C# การสะท้อนกลับ(Reflection) C# คุณสมบัติ(Property) C# ทำดัชนี(Indexer) C# มอบความไว้วางใจ(Delegate) C# เหตุการณ์(Event) C# ตั้งค่า(Collection) C# ยาชื่อสามัญ(Generic) C# วิธีการที่ไม่ระบุชื่อ C# รหัสที่ไม่ปลอดภัย C# multithreading

C # สะท้อน (Reflection)

สะท้อนให้เห็นถึงวิธีการที่สามารถเข้าถึงโปรแกรม, ความสามารถในการตรวจจับและปรับเปลี่ยนสถานะของตัวเองหรือพฤติกรรม

สภามีโมดูลซึ่งมีประเภทซึ่งจะมีสมาชิก สะท้อนให้แพคเกจประกอบวัตถุโมดูลและประเภท

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

ข้อดีและข้อเสีย

ข้อดี:

  • 1 สะท้อนให้เห็นถึงความยืดหยุ่นในการปรับปรุงกระบวนการและความยืดหยุ่น
  • 2 ลดการมีเพศสัมพันธ์เพิ่มกำลังการผลิตปรับตัว
  • 3 ซึ่งจะช่วยให้โปรแกรมในการสร้างและควบคุมประเภทของวัตถุใด ๆ โดยไม่ต้องระดับเป้าหมายก่อนกำหนดค่าตายตัว

ข้อเสีย:

  • 1, ปัญหาการปฏิบัติงาน: ใช้งานเป็นหลักสะท้อนการอธิบายการดำเนินการเมื่อเขตข้อมูลและวิธีการสำหรับการเข้าถึงได้ช้ากว่ารหัสโดยตรง จึงสะท้อนในหลักกรอบความยืดหยุ่นในการใช้งานและขยายขีดความสามารถเรียกร้องขั้นตอนทั่วไปไม่แนะนำ
  • 2, การใช้สะท้อนเลือนภายในตรรกะโปรแกรม; โปรแกรมเมอร์ต้องการที่จะเห็นตรรกะในรหัสที่มา แต่สะท้อนข้ามเทคโนโลยี Source Code ซึ่งจะนำมาซึ่งปัญหาการบำรุงรักษาและรหัสสะท้อนความซับซ้อนกว่ารหัสตรงกันโดยตรง .

สะท้อน (Reflection) ใช้

สะท้อน (Reflection) เพื่อวัตถุประสงค์ดังต่อไปนี้:

  • จะช่วยให้คุณดูคุณสมบัติที่รันไทม์ (แอตทริบิวต์) ข้อมูล
  • จะช่วยให้การตรวจสอบคอลเลกชันของประเภทต่างๆรวมทั้งเป็นตัวอย่างของประเภทนี้
  • จะช่วยให้ปลายที่มีผลผูกพันของวิธีการและคุณสมบัติ (ทรัพย์สิน)
  • มันช่วยให้การสร้างรูปแบบใหม่ในเวลาทำงานและจากนั้นใช้ประเภทนี้ดำเนินการบางอย่าง

ดูข้อมูลเมตา

เราได้กล่าวแล้วในส่วนข้างต้นการใช้งานของการสะท้อน (Reflection) สามารถดูคุณสมบัติ (แอตทริบิวต์) ข้อมูล

วัตถุชั้นSystem.Reflection MemberInfoจะต้องมีการเริ่มต้นสำหรับการค้นพบคุณสมบัติที่เกี่ยวข้องกับการเรียน (แอตทริบิวต์) เดอะ การทำเช่นนี้คุณสามารถกำหนดระดับวัตถุเป้าหมายดังต่อไปนี้:

ข้อมูล System.Reflection.MemberInfo = typeof (MyClass);

โปรแกรมต่อไปนี้แสดงให้เห็นถึงจุดนี้:

การใช้ระบบ

[AttributeUsage (AttributeTargets.All)]
HelpAttribute ระดับส่วนกลาง: System.Attribute
{
   ประชาชน Url สตริงอ่านได้อย่างเดียว;

   สาธารณะ String กระทู้ // กระทู้เป็นชื่อ (ชื่อ) พารามิเตอร์ {
      ได้รับ
      {
         กลับหัวข้อ;
      }
      ชุด
      {

         หัวข้อ value =;
      }
   }

   ประชาชน HelpAttribute (String URL) // URL เป็นตำแหน่ง (ตำแหน่ง) พารามิเตอร์ {
      this.Url = URL;
   }

   หัวข้อ String เอกชน
}
[HelpAttribute ( "ข้อมูลเกี่ยวกับ MyClass ชั้น")]
ระดับ MyClass
{
}

AttributeAppl namespace
{
   Program รุ่น
   {
      เป็นโมฆะคง main (String args [])
      {
         ข้อมูล System.Reflection.MemberInfo = typeof (MyClass);
         วัตถุ [] = แอตทริบิวต์ info.GetCustomAttributes (จริง);
         for (int i = 0; I <attributes.Length; i ++)
         {
            System.Console.WriteLine (แอตทริบิวต์ [I]);
         }
         Console.ReadKey ();

      }
   }
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะแสดงคุณสมบัติแบบกำหนดเองที่แนบมากับMyClassชั้นบน:

HelpAttribute

ตัวอย่าง

ในตัวอย่างนี้เราจะใช้DeBugInfoคุณสมบัติที่สร้างขึ้นในบทที่ผ่านมาและใช้สะท้อน (Reflection)เพื่ออ่านข้อมูลเมตาชั้นสี่เหลี่ยมผืนผ้า

การใช้ระบบ
using System.Reflection;
namespace BugFixApplication
{
   แก้ไขข้อผิดพลาด // คุณสมบัติที่กำหนดเองได้รับมอบหมายในชั้นเรียนและสมาชิก [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 ());
      }
   } // สี่เหลี่ยมผืนผ้าระดับ End  
   
   ระดับ ExecuteRectangle
   {
      เป็นโมฆะคง main (String args [])
      {
         สี่เหลี่ยมผืนผ้า r = สี่เหลี่ยมผืนผ้าใหม่ (4.5, 7.5);
         r.Display ();
         ประเภท type = typeof (สี่เหลี่ยมผืนผ้า);
         // ทราเวิร์ระดับสี่เหลี่ยมผืนผ้าแอตทริบิวต์ foreach (Object แอตทริบิวต์ใน type.GetCustomAttributes (เท็จ))
         {
            DeBugInfo DBI = (DeBugInfo) แอตทริบิวต์;
            ถ้า null (! = DBI)
            {
               Console.WriteLine ( "ข้อผิดพลาดไม่มี: {0}" dbi.BugNo);
               Console.WriteLine ( "ผู้พัฒนา: {0}" dbi.Developer);
               Console.WriteLine ( "ล่าสุดทาน: {0}"
					dbi.LastReview);
               Console.WriteLine ( "ข้อสังเกต: {0}" dbi.Message);
            }
         }
         
         // วิธีย้ำแอตทริบิวต์ foreach (MethodInfo เมตร type.GetMethods ())
         {
            foreach (Attribute ใน m.GetCustomAttributes (จริง))
            {
               DeBugInfo DBI = (DeBugInfo บริการ);
               ถ้า null (! = DBI)
               {
                  Console.WriteLine ( "ข้อผิดพลาดไม่มี: {0} สำหรับวิธีการ: {1}"
						dbi.BugNo, m.Name);
                  Console.WriteLine ( "ผู้พัฒนา: {0}" dbi.Developer);
                  Console.WriteLine ( "ล่าสุดทาน: {0}"
						dbi.LastReview);
                  Console.WriteLine ( "ข้อสังเกต: {0}" dbi.Message);
               }
            }
         }
         Console.ReadLine ();
      }
   }
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

ความยาว: 4.5
ความกว้าง: 7.5
พื้นที่: 33.75
ข้อผิดพลาดไม่มี: 49
ผู้พัฒนา: Nuha อาลี
ดูครั้งสุดท้าย: 10/10/2012
ข้อสังเกต: ตัวแปรที่ไม่ได้ใช้
ข้อผิดพลาดไม่มี: 45
ผู้พัฒนา: ซาร่าอาลี
ดูครั้งสุดท้าย: 2012/12/08
ข้อสังเกต: ประเภทกลับไม่ตรงกัน
ข้อผิดพลาดไม่มี: 55 สำหรับวิธีการ: GetArea
ผู้พัฒนา: ซาร่าอาลี
ดูครั้งสุดท้าย: 19/10/2012
ข้อสังเกต: ประเภทกลับไม่ตรงกัน
ข้อผิดพลาดไม่มี: 56 สำหรับวิธีการ: การแสดงผล
ผู้พัฒนา: ซาร่าอาลี
ดูครั้งสุดท้าย: 19/10/2012
ข้อสังเกต: