Automatic properties in Struct

23 בנובמבר 2008

תגיות:
תגובה אחת


אחד מהחידושים ב – 3.0 #C היה Automatic Properties


בעבר היינו כותבים:




    1     public class Class1


    2     {


    3         private int m_MyMember;


    4 


    5         public int MyMember


    6         {


    7             get { return m_MyMember; }


    8             set { m_MyMember = value; }


    9         }


   10     }


   11 }



והיום אנחנו יכולים לוותר על הגדרת ה- Member עם כל מה שה- Property עושה, זה get;set, אפשר לכתוב כך:




    1     public class Class1


    2     {


    3         public int MyMember { get; set; }


    4     }



השאלה, האם אפשר לכתוב Automatic Properties גם ב- Struct,


לכאורה, למה לא ?, אז ננסה לכתוב כך:




    1     public struct Struct1


    2     {


    3         public int MyMember { get; set; }


    4     }



וננסה לקמפל.


אוקי זה מתקמפל,


ננסה להוסיף Ctor ל Struct, וננסה לקמפל…




    1     public struct Struct1


    2     {


    3         public int MyMember { get; set; }


    4 


    5         public Struct1(int member)


    6         {


    7             MyMember = member;


    8         }


    9     }



וזה לא מתקמפל, מה קרה ?


ההסבר הוא כזה, אנחנו יודעים, שאם מגדירים Ctor על struct, אנחנו חייבים לאתחל את כל ה Fields שלו,


כשאנחנו מגדירים Automatic Property, למעשה מוגדר Field, ואנחנו חייבים לאתחל אותו לפני שנגש ל Property,


ולכן זה יעבוד רק כך:


 




   1     public struct Struct1


   2     {


   3         public int MyMember { get; set; }


   4 


   5         public Struct1(int member)


   6             : this()


   7         {


   8             MyMember = member;


   9         }


   10    }


אם נקרא מתוך ה- Ctor שלנו ל Default Ctor, זה יתקמפל, כי זה יאתחל את כל ה- Fields 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. Pingback: מה חדש ב– C# 6, חלק 5 | שלמה גולדברג (מקבוצת הרב דוטנט) - shlomo@haravdotnet.co.il