220 likes | 389 Views
Web Services. Attributes. ליווי מקצועי : ארז קלר www.corner.co.il. מבוא. הוספת Attributes לקוד. Attributes מותאמים. מבוא. כל קובץ מקומפל ב- # C נקרא Assembly . כל Assembly מורכב ממספר חלקים: MSIL, Manifest, Metadata ו- Resources .
E N D
Web Services Attributes ליווי מקצועי : ארז קלר www.corner.co.il
מבוא. • הוספת Attributes לקוד. • Attributes מותאמים.
מבוא • כל קובץ מקומפל ב- #C נקרא Assembly . • כל Assembly מורכב ממספר חלקים: MSIL, Manifest, Metadata ו- Resources. • Assemblies הם רכיבים המתארים את עצמם באמצעות ה- Manifest. • Assemblies מכילים טיפוסים אשר גם הם מתארים את עצמם באמצעות ה- Metadata . • .NET Framework, באמצעות ה - Attributes, מאפשרת לשייך דברי הסבר, פירוש, ביאור לטיפוסים המוגדרים ב- Assembly. למחלקות,למתודות,למשתני המחלקה למאפיינים או אף ל-Assembly עצמו.
מבוא • ניתן לראות Attribute כתגית, באמצעותה ניתן להפיץ מידע ל- Runtime על התכונות וההתנהגות של מחלקות, מבנים Enum’s ו- Assemblies. • Attribute הנה תכונה הצהרתית.. • באמצעות Attribute ניתן להרחיב את תיאור הטיפוסים של התוכנית מעבר למה שהשפה מגדירה. • המידע המוגדר ב- Attribute נשמר ב- Metadata של האלמנט אליו ה- Attribute מתייחס. • באמצעות ה- Attributes מתאפשר לנו להרחיב את ה- Metadata.
מבוא C# מספקת מספר מילות מפתח להגדרת הטיפוסים אשר מוגדרים בתוכנית , מילות מפתח אלו משפיעות על הדרך בה ניתן לטפל בטיפוסים אלו. לדוגמה: • מחלקות יכולות להיות מוגדרות כ- Private או Internal . • מתודות ומשתני המחלקה יכולים להיות מוגדרים כ- Private, Public, Protected, Internal או כ- Protected Internal . • ניתן להגדיר מתודות ומשתני מחלקה כ- Static או Instance . • משתני מחלקה יכולים להיות מוגדרים כשדות רגילים, כ- שדות לקריאה בלבד (Read Only), או כשדות קבועים (Const). באמצעות Attribute ניתן להרחיב את התיאור מעבר למה שהשפה מגדירה. התיאור הנוסף יוכל להשפיע על הדרך בה טיפוסים אחרים, או ה- CLR יטפלו בטיפוסים שנכתוב.
מבוא דוגמאות אפשריות ל- Attribute : • תיעוד. מועד כתיבת המחלקה או שיטה, תאריך עידכון אחרון, שם המחבר. • שיטה תבוצע על פי התנייה. בתהליך של פיתוח נרצה ששיטה אשר כותבת מידע לקובץ לוג תופעל בכל פעם שמתגלה תקלה. כאשר האפליקציה תופץ ללקוח, נעדיף שהתנהגות זו תבוטל. • שליטה על הדרך בה ניתן לבצע Serialization לטיפוסים. כאשר מעבירים אובייקטים ממחשב למחשב, האובייקט עובר תהליך הנקרא Serialization לעיתים נרצה לשלוט על האופן בו יועבר המידע.
מבוא. • הוספת Attributes לקוד. • Attributes מותאמים.
הוספת Attributes לקוד תחביר : [AttributeName(parameter1,parameter2, ... )] Attribute ניתן לייחס למחלקות, למשתני המחלקה, למתודות, למאפיינים וכו' לדוגמה: [MyAttribute (Param1,Param2)] class Sample { . . . public void Method1() { . . . } }
הוספת Attributes לקוד לדוגמה: class Sample { . . . [MyAttribute (Param1,Param2)] public void Method1() { . . . } } class Sample { [MyAttribute (Param1,Param2)] private string m_Str; public void Method1() { . . . } }
הוספת Attributes לקוד לדוגמה: ניתן להגדיר מספר Attributes למחלקה, משתנה מחלקתי או שיטה: class Sample { . . . [MyAttribute1 (Param1,Param2), MyAttribute2 (Param3)] public void Method1() { . . . } }
הוספת Attributes לקוד דוגמאות ל- Attributes המוגדרים ב- .NET המחלקה FlagsAttribute מגדיר שימוש ב- Enum כ- Bitwise , לכל ערך ב- Enum ינתן ערך ייצוג של Bit . כל Bit ייצג ערך של Enum . השילוב של הביטים מגדיר את הצבע.
הוספת Attributes לקוד דוגמאות ל- Attributes המוגדרים ב- .NET המחלקה FlagsAttribute – דוגמה Enum רגיל – כל ערך מיוצג על ידי Integer : enum ColorAsByte { Black = 0, Red = 1, Green = 2, Blue = 4 } Enum המעוטר על ידי FlagsAttribute על ערך מיוצג על ידי Bit בודד: [FlagsAttribute] enum ColorAsBit : byte { Black = 0, Red = 1, Green = 2, Blue = 4 } ניתן להסיר את המילה Attribute מה- Attribute .
הוספת Attributes לקוד דוגמאות ל- Attributes המוגדרים ב- .NET המחלקה FlagsAttribute – דוגמה static void Main() { for (int val = 0; val <= 8; val++) Console.WriteLine("{0,3} - {1}",val, ((ColorAsByte)val).ToString()); for (int val = 0; val <= 8; val++) Console.WriteLine("{0,3} - {1}",val, ((ColorAsBit)val).ToString()); } הפלט
הוספת Attributes לקוד דוגמאות ל- Attributes המוגדרים ב- .NET המחלקה ConditionalAttribute Attribute המעטר מתודה ומורה ל-CLR להפעיל אותה רק במידה ומוגדרת הוראת קדם מהדר ( preprocessor) מתאימה. הוראת קדם מהדר מוגדרת באמצעות הפקודה #define והיא חייבת ממוקמת להיות בראש קובץ (לפני ה- using ). הגדרת #define : #define CONDITION הגדרת קדם מהדר הערך המוגדר
הוספת Attributes לקוד דוגמאות ל- Attributes המוגדרים ב- .NET המחלקה ConditionalAttribute- דוגמה #define Condition using System; class Sample { public void Print1() { Console.WriteLine("Hello There Version 1"); } [Conditional("Condition")] public void Print2() { Console.WriteLine("Hello There Version 2"); } } הגדרת קדם מהדר המתודה תרוץ רק כאשר יוגדר הערך “Condition” באמצעות הוראת הקדם מהדר
מבוא. • הוספת Attributes לקוד. • Attributes מותאמים.
Attributes מותאמים • שפת C# מאפשרת יצירת Custom Attributes על ידי יצירת מחלקה הנגזרת מהמחלקה Attributes . public class MyCustomAttribute:Attribute { . . . }
Attributes מותאמים בשלב ראשון נגדיר את ייעוד ה- Attribute באמצעות AttributeUsage [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method, AllowMultiple = true)] במקרה זה, באמצעות ה- Attribute נוכל לספק מידע על מחלקות, מבנים ומתודות, ונוכל להגדיר לכל אחד מהם מספר Attributes. לא נוכל לתאר באמצעות ה- Attribute מאפיינים השייכים למחלקה משום שלא הוספנו זאת ב- AttributeUser
Attributes מותאמים בשלב שני נגדיר מחלקה חדשה היורשת את המחלקה Attribute המוגדרת ב- .NET Framework . public class DeveloperInfoAttribute : Attribute { . . . } מחלקת ה- Custom Attribute חייבת לרשת את המחלקה Attribute . מקובל ששם המחלקה מסתיים המילה Attribute (כמו ב- Custom Exception).
Attributes מותאמים הוספת משתני מחלקה ומאפיינים: public class DeveloperInfoAttribute : Attribute { string author_name; string class_description; public string AuthorName {. . .} public string ClassDescription{. . .} } המידע אשר יוצג ב- Assembly נשמר כ- Data Members של המחלקה. מאפיינים אלו מאפשרים לקרוא את המידע מה – Assembly באמצעות Reflection
Attributes מותאמים השימוש ב- CustomAttribute : [DeveloperInfo(“moshe","this project demonstrate custom attribute build and usage")] public class MyClass { . . . [DeveloperInfo(“moshe","stam unnecessary method")] public void StamMetohd() { . . . } } ניתן להסיר את המילה Attribute מה- Attribute .
Agenda • Introduction to Attributes. • Applying Attributes to Code. • Custom Attribute.