DataTable

בטיטi

New member
../images/Emo41.gif DataTable

אני מאחסן DataTable במשתנה Session, אני מוציא אותו מ ה Session תוך המרה ל DataView עם DefaultView ומבצע RowFilter. אני נוכח לדעת כי הנ"ל משפיע על המשתנה הנמצא ב Session (אני צורך אותו גם ממקום אחר, ולהפתעתי מקבל את הנתונים מפולטרים). האם המסקנה היא שמדובר במצביעים ?
 

yairov

New member
נכון

רק אובייקטים שהם ValueType מועברים ByVal כלומר, נוצר מופע חדש של כל אחד מהם. כל שאר האובייקטים מועברים ByRef. אאל"ט ל-DataTable יש מתודה שנקראת Clone שמייצרת מופע חדש.
 

itzikbs

New member
"צורך אותו גם ממקום אחר" ?

אם אתה קורה לאותו מפתח באוסף אז זה אותו אחד בדיוק, והתשובה המלומדת הקודמת נכונה לגמרי זה מה שיפה בכל העסק הזה של "מחשבים ותוכנה" ברגע שיש לך אובייקט (Reference) זה בהגדרה "מצביע לאובייקט" ומאותו רגע כל שינוי בו הוא שינוי המשתקף בכל הצורכים אותו. יותר מזה, בדוגמא שלך אתה יכול לנהל כמה מפתחות של Session עבור אותו אובייקט (במקררה שלך DT) כולמר אתה תכניס לאוסף את אותו אובייקט רק כל פעם עם מפתח אחר כאשר כולם יצביעו על אותו אחד. אם תרצה אני אנסה לסבך אותך עוד טיפה ולהרחיב את הדיון: על מנת להמנע מסיבוכים וסיכונים ניתן להשתמש במתודת Clone שקיימת למשל ב DataSet או MembershipClone ובכל מקרה ואם ממש עובדים עם אובייקטים אזי ניתן ליצור מה שנקרא : Copy constructor. (דבר לא מובנה ב C# ) ובכך ליצור "מצב בטוח" שכשאתה מעביר אובייקט (נניח כפרמטר למתודה) אתה מעביר העתק שלו ויוצר מצב כמו של const params ב ++C. לינק: http://msdn2.microsoft.com/en-us/library/ms173116.aspx ביי איציק ב.
 
למעלה