Latest web development tutorials

C # تفكير (التفكير)

يمكن سائل انعكاس الوصول إلى البرنامج، وقدرتها على كشف وتعديل دولتهم أو السلوك.

يحتوي الجمعية وحدة، والتي تحتوي على أنواع، التي بدورها تحتوي على الأعضاء. يوفر انعكاس حزمة كائن المجالس، وحدات وأنواعها.

يمكنك استخدام انعكاس لإنشاء مثيل من نوع حيوي، لا بد من نوع إلى كائن موجود، أو الحصول على نوع من كائن موجود. يمكنك ثم استدعاء النوع من النهج أو الوصول إلى الحقول والخصائص.

إيجابيات وسلبيات

المزايا:

  • 1، مما يعكس تحسن المرونة العملية وتطويره.
  • 2، والحد من اقتران، وزيادة القدرة على التكيف.
  • 3، والذي يسمح البرنامج لخلق والسيطرة على أي نوع الكائن، دون الثابت ترميز الفئة المستهدفة السابقة.

العيوب:

  • 1، مشاكل الأداء: استخدام هو في الأساس انعكاس شرح طريقة عمل، عندما الحقول والطرق للوصول إلى أبطأ بكثير من كود المباشر. وبالتالي انعكاس على مرونة التطبيق الرئيسية والإطار قابلية تطالب، فمن غير المستحسن الإجراء العام.
  • 2، واستخدام الأفكار غامض ضمن منطق البرنامج؛ المبرمجين نريد أن نرى المنطق في شفرة المصدر، ولكن انعكاس تجاوز تكنولوجيا شفرة المصدر، والتي سوف تجلب قضايا الصيانة، ورمز التفكير أكثر تعقيدا من رمز المقابلة مباشرة .

لا ارادي (انعكاس) الاستخدامات

لا ارادي (التأمل) للأغراض التالية:

  • انها تسمح لك لعرض خصائص في (سمة) معلوما وقت التشغيل.
  • انها تسمح باستعراض مجموعة من أنواع مختلفة، فضلا عن أمثلة من هذه الأنواع.
  • لأنها تتيح الربط المتأخر من الأساليب والخصائص (الملكية).
  • فإنه يسمح لخلق نوع جديد في وقت التشغيل، ومن ثم استخدام هذه الأنواع أداء بعض المهام.

عرض البيانات الوصفية

ذكرنا سابقا في المقطع أعلاه، واستخدام التفكير (التفكير) يمكن عرض خصائص (السمة) المعلومات.

لا بد من تهيئة، لاكتشاف الخصائص المقترنة فئة (سمة) الكائنSystem.Reflection و memberinfoالطبقة. للقيام بذلك، يمكنك تحديد فئة الكائن الهدف، على النحو التالي:

System.Reflection.MemberInfo المعلومات = تشير typeof (MyClass)؛

يوضح البرنامج التالي هذه النقطة:

باستخدام نظام.

[AttributeUsage (AttributeTargets.All)]
HelpAttribute الطبقة الجمهور: System.Attribute
{
   العام رابط سلسلة للقراءة فقط.

   سلسلة العامة موضوع // الموضوع هو اسمه (اسمه) معلمات {
      الحصول على
      {
         العودة الموضوع؛
      }
      مجموعة
      {

         الموضوع = القيمة؛
      }
   }

   الجمهور HelpAttribute (سلسلة رابط) // رابط هو تحديد المواقع (الموضعية) المعلمة {
      this.Url = رابط.
   }

   موضوع سلسلة الخاص؛
}
[HelpAttribute ( "معلومات عن MyClass الطبقة")]
الفئة MyClass
{
}

AttributeAppl مساحة
{
   برنامج الدرجة
   {
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         System.Reflection.MemberInfo المعلومات = تشير typeof (MyClass)؛
         يعترض [] = سمات info.GetCustomAttributes (صحيح)؛
         ل(كثافة العمليات ط = 0؛ ط <attributes.Length، وأنا ++)
         {
            System.Console.WriteLine (سمات [أنا])؛
         }
         Console.ReadKey ()؛

      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، فإنه سيتم عرض خصائص مخصصة تعلق علىMyClassالدرجة على:

HelpAttribute

أمثلة

في هذا المثال، سوف نستخدم خاصيةDeBugInfoإنشاؤها في الفصل الأخير، ويستخدم التفكير (التفكير) لقراءة البيانات الوصفية الطبقةمستطيل.

باستخدام نظام.
باستخدام System.Reflection.
مساحة BugFixApplication
{
   // خلل يتم تعيين خاصية مخصصة إلى فئة وأعضائها [AttributeUsage (AttributeTargets.Class |
   AttributeTargets.Constructor |
   AttributeTargets.Field |
   AttributeTargets.Method |
   AttributeTargets.Property،
   AllowMultiple = صحيح)]

   DeBugInfo الطبقة الجمهور: System.Attribute
   {
      الباحث bugNo الخاص؛
      مطور سلسلة الخاص؛
      lastReview سلسلة الخاص؛
      رسالة سلسلة العامة؛

      الجمهور DeBugInfo (BG كثافة العمليات، ديف سلسلة، سلسلة د)
      {
         this.bugNo = حرس الحدود.
         this.developer = ديف.
         this.lastReview = د.
      }

      BugNo كثافة الجمهور
      {
         الحصول على
         {
            العودة bugNo.
         }
      }
      المطور سلسلة العام
      {
         الحصول على
         {
            العودة المطور.
         }
      }
      سلسلة العامة LastReview
      {
         الحصول على
         {
            العودة lastReview.
         }
      }
      رسالة سلسلة العامة
      {
         الحصول على
         {
            العودة الرسالة؛
         }
         مجموعة
         {
            رسالة = القيمة؛
         }
      }
   }
   [DeBugInfo (45، "زارا علي"، "2012/12/08"،
	رسالة = "عدم تطابق نوع العودة")]
   [DeBugInfo (49، "نهى علي"، "2012/10/10"،
	رسالة = "متغير غير المستخدمة")]
   الطبقة مستطيل
   {
      // المتغيرات عضو باي طول مزدوج.
      محمية عرض مزدوج.
      مستطيل العام (ل مزدوج، ث مزدوج)
      {
         طول = لتر.
         العرض = ث.
      }
      [DeBugInfo (55، "زارا علي"، "19/10/2012"،
	   رسالة = "عدم تطابق نوع العودة")]
      GetArea مزدوج العام ()
      {
         العودة طول * العرض.
      }
      [DeBugInfo (56، "زارا علي"، "19/10/2012")]
      العرض باطلة العامة ()
      {
         Console.WriteLine ( "طول: {0}"، طول)؛
         Console.WriteLine ( "العرض: {0}"، العرض).
         Console.WriteLine ( "المساحة: {0}"، GetArea ())؛
      }
   } // نهاية الطبقة مستطيل  
   
   الطبقة ExecuteRectangle
   {
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         المستطيل ص = المستطيل الجديد (4.5، 7.5)؛
         r.Display ()؛
         نوع نوع = تشير typeof (مستطيل)؛
         // اجتياز الطبقة مستطيل سمات foreach (سمات كائن في type.GetCustomAttributes (كاذبة))
         {
            DeBugInfo DBI = (DeBugInfo) سمات.
            إذا (خالية! = 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 (السمة في m.GetCustomAttributes (صحيح))
            {
               DeBugInfo DBI = (DeBugInfo) و.
               إذا (خالية! = 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
المطور: نهى علي
تاريخ آخر مشاركة: 2012/10/10
ملاحظات: متغير غير المستخدمة
علة رقم: 45
المطور: زارا علي
تاريخ آخر مشاركة: 2012/12/08
ملاحظات: عدم تطابق نوع عودة
علة رقم: 55، عن الطريقة: GetArea
المطور: زارا علي
تاريخ آخر مشاركة: 19/10/2012
ملاحظات: عدم تطابق نوع عودة
علة رقم: 56، عن الطريقة: العرض
المطور: زارا علي
تاريخ آخر مشاركة: 19/10/2012
ملاحظات: