הורשה

SpecialNight

New member
הורשה

כיצד ניתן לרשת ממספר מחלקות ב c#? שמעתי ש c# לא תומכת בהורשה מרובה,האם יש לזה תחליף כל שהוא? תודה.
 

Acid454

New member
תגובה

c# באמת לא תומכת בהורשה מרובה. במקום זה ניתן להשתמש בממשקים. ממשק הוא אוסף של מתודות אבסטרקטיות (כלומר לא ממומשות) שהמחלקה היורשת צריכה לממש. למשל אם אתה רוצה ליצור מחלקה משלך, שתתמוך במיון (ל-ArrayList וכדומה), צריך לממש את הממשק ISerializable בצורה הבאה:
public class MyClass : ISerializable { public int CompareTo(object obj) { . . . } . . . }​
 

SpecialNight

New member
פוינטרים

יש לי את הקוד הזה:
using System; class moti { int x; int y; unsafe public static void Main() { yosi kooki = new yosi(); yosi *p = &kooki; p->x=5; (*p).y=10; yosi.sol(); Console.WriteLine("{0}",kooki.y); Console.WriteLine("{0}",kooki.x); }} class yosi { public yosi() { Console.WriteLine("Constractor"); } public static void sol() { Console.WriteLine("Sol"); } }​
תהרגו אותי אבל אין לי מושג למה הוא לא עובד... אני תכננתי שהוא יציג לי את הפלט הזה:
Constractor Sol 10 5​
מה בדיוק לא בסדר שם? מצורפת תמונה עם השגיאות.
 

gilad g

New member
ועוד דבר

אתה לא יכול להשתמש ב-& על אובייקט managed (כלומר, אוביקט שמנוהל ע"י ה-CLR). זה בגלל שהכתובת שלו כל הזמן משתנה, כי ה-GC משחק ומזיז אותה. בשביל לומר ל-CLR לא להזיז את האובייקט, אתה צריך להשתמש ב-fixed:
yosi kooki = new yosi(); fixed(yosi* p = &kooki;) { //Here we will use p. }​
שים לב שגם הזזתי את המיקום של הכוכבית.
 

SpecialNight

New member
המממ

אבל בקוד הזה משתמשים ב & ולא נוגעים כלל ב fixed:
1. using System; 2. public struct Coords 3. { 4. int x; 5. int y; 6. unsafe public static void Main() 7. { 8. Coords c = new Coords(); 9. Coords *p = &c; 10. { 11. p->y = 6; 12. (*p).x = 5; 13. } 14. Console.WriteLine(c.y); 15. Console.WriteLine(c.x); 16. } 17. }​
איך אתה מסביר את זה?
 

gilad g

New member
פשוט מאוד

Coords הוא struct, ולכן הוא נשמר על ה-stack (איפה שה-CLR לא מזיז אובייקטים), ולכן אין צורך להשתמש ב-fixed
 

gilad g

New member
כן

כשהמשתנה שלך הוא משתנה רגיל (int פשוט). במקרה הזה הוא נמצא (כמו ה-struct) על ה-stack.
 

gilad g

New member
אופס, זה לא נכון ../images/Emo163.gif

אי אפשר להחזיק בפוינטרים ל-class-ים, כי הם על ה-heap.
 
למעלה