www.doronamir.com

E-mail: doron@doronamir.com

 

 

Constructor

 

בפרק זה נלמד על יצירת אובייקט , אתחול האובייקט והריסת האובייקט

ועל המושגים הבאים

·        Default Constructor

 

כאשר אנו יוצרים אובייקט ב C# אנו משתמשים במילה new המאפשרת הקצאת זיכרון עבור האובייקט (to allocate memory)  כאשר אנו רוצים לאתחל בערך ראשוני את שדות  האובייקט  Initialize Object )  (בזמן יצירת האובייקט יש להשתמש בConstructor .

 

Constructor: מתודה המופעלת בעת יצירת האובייקט באופן אוטומטי מטרת מתודה זו לאתחל את ערכי האובייקט ולבצע פעולות ראשוניות מיד אם יצירת האובייקט.

 

ב C# אם לא נבנה constructor יופעל ה Default Constructor אשר מאתחל את השדות לפי סוג השדה ( ב Class )

Numeric =0

Bool = false

Reference =null

 

בקוד הנ"ל ניתן לראות את שני המצבים , בחלק הראשון אנו מתמשים ב Constructor מסוג   Instance Constructor כלומר Constructor שנועד לאתחל את ערכי האובייקט ואנו בונים אותו , בדוגמה הבאה ניתן לאות שימוש ב Default Constructor שאינו נבנה ע"י המתכת אך מאתחל את הערכים ע"פ הטיפוס שלהם.

 

דוגמה 1 : Instance Constructor

 

namespace DoronAmir

{

     class Point

     {

           public int x;

           public int y;

 

           public Point()

          {

          x=5;

          y=10;

          }

 

     }

 

     class ClassMain

     {

    

           static void Main(string[] args)

           {

           Point P1 = new Point();

           Console.WriteLine("X={0},Y={1}",P1.x,P1.y);

           }

     }

}

 

// X=5

// Y=10

 

דוגמה 2 : Default Instance Constructor

namespace DoronAmir

{

     class Point

     {

     public int x;

     public int y;

     }

 

     class ClassMain

     {

    

           static void Main(string[] args)

           {

           Point P1 = new Point();

           Console.WriteLine("X={0},Y={1}",P1.x,P1.y);

           }

     }

}

 

// X=0

// Y=0

העמסת Constructors

ניתן לבנות יותר מ   Constructor אחד בדיוק כמו בהעמסת פונקציות כלומר פונקציה זהה אך רשימת פרמטרים שונה

יש לשים לב כי כאשר אנו בונים Constructor הקומפיילר אינו מייצר Default Constructor  ולכן אם רוצים לייצר אובייקט

ללא מסירת פרמטרים יש לבנות Constructor שאינו מכיל רשימת פרמטרים .

 

using System;

 

namespace DoronAmirGC

{

    class Person

    {

    private string FirstName;

    private string LasttName;

    private int Age;

 

        public Person()  // כאשר בונים פונקציות בנייה הקומפיילר לא בונה פונקציית בנייה מראש

        {

            this.FirstName="No First name";

            this.LasttName="No last name";

            this.Age=0;

        }

 

        public Person(string FirstName)

        {

        this.FirstName=FirstName;

        this.LasttName="No last name";

        this.Age=0;

        }

       

        public Person(string FirstName,string LastName)

        {

            this.FirstName=FirstName;

            this.LasttName=LastName;

            this.Age=0;

        }

        public Person(string FirstName,string LastName,int Age)

        {

            this.FirstName=FirstName;

            this.LasttName=LastName;

            this.Age=Age;

        }

        public void ShowData()

        {

        Console.WriteLine("First Name ={0}",this.FirstName);

        Console.WriteLine("Last Name ={0}",this.LasttName);

        Console.WriteLine("Age ={0}",this.Age);

        Console.WriteLine("---------------------------------");

        }

   

    }

 

   

    class ClassMain1

    {

   

        static void Main(string[] args)

        {

        Person obj1 = new Person();// אם לא נבנה פונקציה בונה עבור מצב ריק נקבל שגיאה

        Person obj2 = new Person("Doron");

        Person obj3 = new Person("Doron" , "Amir");

        Person obj4 = new Person("Doron" , "Amir",29);

 

        obj1.ShowData();

        obj2.ShowData();

        obj3.ShowData();

        obj4.ShowData();

       

        }

    }

}