Latest web development tutorials

C # خصائص (السمة)

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

خصائص (السمة) لإضافة بيانات التعريف، مثل تعليمات المترجم والتعليقات، وصف، طرق، معلومات إضافية وهلم جرا. يوفر برنامج .NET Framework نوعين من الخصائص: خصائصمحددة سلفا،والخصائصالمخصصة.

خصائص محددة سلفا (سمة)

خصائص محددة سلفا (سمة) بناء الجملة التالي:

[سمة (positional_parameters، name_parameter = قيمة، ...)]
العنصر

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

سمات محددة مسبقا (سمة)

يوفر إطار عمل دوت نت ثلاث سمات محددة مسبقا:

  • AttributeUsage
  • مشروط
  • مهمل

AttributeUsage

سمات محددة مسبقاAttributeUsage يصف كيفية استخدام فئة سمة مخصصة.وهي تحدد نوع من الخصائص يمكن تطبيقها على المشروع.

أحكام هذه الميزة بناء الجملة التالي:

[AttributeUsage (
   validon،
   AllowMultiple = allowmultiple،
   = ورثت ورثت
)]

حيث:

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

على سبيل المثال:

[AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property، 
AllowMultiple = صحيح)]

مشروط

وتعتبر هذه الميزة طريقة شرط محدد مسبقا وتنفيذها يعتمد على رأس معرف تجهيزها به.

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

أحكام هذه الميزة بناء الجملة التالي:

[شرطي (
   conditionalSymbol
)]

على سبيل المثال:

[شرطي ( "التصحيح")]

يوضح المثال التالي هذه الميزة:

DEBUG تعريف #
باستخدام نظام.
باستخدام System.Diagnostics.
الطبقة العامة Myclass
{
    [شرطي ( "التصحيح")]
    العامة ساكنة باطلة رسالة (جي اس سلسلة)
    {
        Console.WriteLine (جي اس)؛
    }
}
فئة اختبار
{
    function1، وباطل ثابت ()
    {
        Myclass.Message ( "في وظيفة 1.")؛
        function2 ()؛
    }
    function2 باطل ثابت ()
    {
        Myclass.Message ( "في وظيفة 2.")؛
    }
    الفراغ ثابت العامة الرئيسية ()
    {
        Myclass.Message ( "في وظيفة الرئيسية.")؛
        function1، و()؛
        Console.ReadKey ()؛
    }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

في وظيفة الرئيسية
في وظيفة 1
في وظيفة 2

مهمل

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

أحكام هذه الميزة بناء الجملة التالي:

[عفا عليها الزمن (
   رسالة
)]
[عفا عليها الزمن (
   رسالة،
   ISERROR
)]

حيث:

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

يوضح المثال التالي هذه الميزة:

باستخدام نظام.
الطبقة العامة MyClass
{
   [عفا عليها الزمن ( "لا تستخدم OldMethod، استخدم NewMethod بدلا من ذلك"، صحيح)]
   ساكنة باطلة OldMethod ()
   { 
      Console.WriteLine ( "هذا هو الأسلوب القديم")؛
   }
   NewMethod الفراغ ثابت ()
   { 
      Console.WriteLine ( "هذا هو أسلوب جديد")؛ 
   }
   الفراغ ثابت العامة الرئيسية ()
   {
      OldMethod ()؛
   }
}

عند محاولة ترجمة البرنامج، فإن المترجم يعطي رسالة خطأ تفيد:

 لا تستخدم OldMethod، استخدم NewMethod بدلا

إنشاء سمات مخصصة (سمة)

صافي الإطار يسمح لك لخلق الخصائص المخصصة لتخزين المعلومات التقريرية، ويمكن استرجاعها في وقت التشغيل. وتستند هذه المعلومات على معايير التصميم ويحتاج التطبيق إلى أن تترافق مع أي عنصر الهدف.

إنشاء وتشمل استخدام ميزات مخصصة أربع خطوات:

  • خصائص بيان مخصص
  • بناء خصائص مخصصة
  • تطبيق خصائص مخصصة على عنصر برنامج الهدف
  • الوصول من خلال خصائص التفكير

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

خصائص بيان مخصص

والخصائص المخصصة الجديدة التي يمكن جنيها من الدرجةSystem.Attribute.على سبيل المثال:

// خلل يتم تعيين سمة مخصصة لفئة وأعضائها [AttributeUsage (AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property،
AllowMultiple = صحيح)]

DeBugInfo الطبقة الجمهور: System.Attribute

في رمز أعلاه، أعلنا سمة مخصصة اسمهDeBugInfoمن.

بناء خصائص مخصصة

دعونا نبني سمة مخصصة اسمهDeBugInfo،وسيتم تخزين المعلومات في المصحح ميزة الحصول عليها. فإنه يخزن المعلومات التالية:

  • قانون رقم علة
  • المطورين يعترفوا إلا باسم من الشوائب
  • تاريخ آخر مراجعة للقانون
  • والمطورين مخزن الرسائل سلسلة علامة

وسوف تستخدم لديناDeBugInfoالفئات الثلاث الأولى لتخزين ثلاث المعلومات الخاصة الملكية (الملكية) ومع الممتلكات العامة لتخزين الرسائل ل(الملكية). تحديد المواقع لذلك سوف تكون هناك حاجة أرقام علة اسم المطور وتاريخ المراجعة DeBugInfo فئة (الموضعية) معلمة، والرسالة هي اسم اختياري (اسمه) معلمات.

يجب أن يكون كل الممتلكات منشئ واحد على الأقل. المواقع المطلوبة (الموضعية) المعلمة التي يجب تمريرها من قبل المنشئ. يوضح التعليمة البرمجية التالية فئاتDeBugInfo:

// خلل يتم تعيين سمة مخصصة لفئة وأعضائها [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 ())؛
  }
}

في الفصل التالي، وسوف نستخدم الكائن فئة انعكاس لاسترداد هذه المعلومات.