שיכפול אובייקט asp.net

asafeven

New member
שיכפול אובייקט asp.net

איך ניתן לשכפל אובייקט, לדוגמא datatable ? אני רוצה שיהיו לי שני מופעים שלו כדי שבאחד אני אוכל לבצע שינויים ואת הראשון לנתונים אחרים .
 

MightyMonk

New member
תשובה

לא ניתן לשכפל אובייקט אחד למשתנה שני, אם ברצונך לנתב את המידע בתורה שונה, ברגע שייצרנו מופע מה שקורה איננו מכילים את ההגדרה עצמה אלא יוצרים ייחוס לאובייקט, אובייקטים נכללים כ- Reference Type לכן מתי שהעתקת אובייקט אחד למשתנה השני בעצם יצרת שתי יחוסים הניגשים לאותו אובייקט, לכן מה שנותר הוא ליצור שתי מופעים של אותה מחלקה. במקרה זה מחלקה מטיפוס Datatable.
Dim objDataTable1 As New DataTable Dim objDataTable2 As New DataTable objDataTable2 = objDataTable1​
 

gilad g

New member
../images/Emo31.gif

ל-DataTable יש מתודה Copy, ולכמה אובייקטים שמממשים את IClonable יש מתודת Clone.
 

MightyMonk

New member
אפשרי ...

זה כמעט אותו דבר כשמתשים ב- Clone העתקה שמתבצעת נקראת Shallow Copy זאת אומרת זה רק מחזיר את הייחוס (Reference) לאובייקט המקור ומעתיק את מבנה אובייקט המקור לזה המועתק, כל שינוי באובייקט המועתק ע"י Clone יתבצע גם באובייקט המקור ולהפך, ומה שאתה רוצה נקרא Deep Copy ולכן יש להשתמש פה גם ב- IClonable וגם ב- Serialization בכדי לבצע באובייקט המועתק כל שינוי מבלי להשפיע על אובייקט המקור. ההבדל בין Clone ל- Copy ש- Copy מעתיקה גם את המידע. לפעמים חשובים לנו הבדלי הביצועים ובמקום ליצור מופע חדש כמו שעשיתי בדוגמה הקודמת שלי שהנה ממש פשוטה,נשתמש בשיטה הזאת. מידע נוסף: http://www.devcity.net/net/article.aspx?alias=20020306 http://www.codeproject.com/dotnet/Clone.asp
 
../images/Emo31.gif בפירוש לא

מה שאתה מתאר זו בעצם השמה:
Employee x = new Employee("Chatul"); Employee y = x; y.Name = "Nice Chatul"; Console.WriteLine(x.Name); // Will return "Nice Chatul";​
אבל אם במקום ההשמה היינו משתמשים ב-Clone (הממומש בצורה הנכונה) אז זה היה אחרת:
Employee x = new Employee("Chatul"); Employee y = (Employee)x.Clone(); y.Name = "Nice Chatul"; Console.WriteLine(x.Name); // Will return "Chatul";​
ובמקרה של DataTable, הפונקציה Clone תחזיר DataTable חדש במבנה של האובייקט עליו הופעל ה-Clone אבל ללא הנתונים, והפונקציה Copy תחזיר העתק מלא של ה-DataTable עליו הופעלה הפונקציה כולל כל הנתונים. לפרטים: Icloneable, DataTable.Clone, DataTable.Copy
 
למעלה