שאלה על c# syntax

itaysk

New member
שאלה על c# syntax

מה זה אומר כשכותבים מתודה ככה:
public MyMethod () : SomeOtherMethod() { ... }​
?
 

itaysk

New member
אבל יש מימוש למתודה..

אז אתה אומר ש SomeOtherMethod אמור להיות SomeOtherClass? ומתי יקרא הקונסטרקטור? ואיך זה משתלב עם מימוש המתודה? בכלליות אני יודע שהסימן ":" משמש להורדה כשמגדירים קלאסים, מה השימוש שלו כשמגדירים מתודה?
 

nadav1974

New member
תיקון

לפחות אצלי הסביבה נותנת שגיאה כשאני מנסה לעשות משהו כמו שכתבת:
Keyword 'this' or 'base' expected​
כש-this יקרא לקונסטרקטור אחר של ה-class, ו-base יקרא לקונסטרקטור המתאים של ב-base class. אם זה עובד ומתקמפל לך, צרף קוד קצת יותר גדול בשביל להבין מה יש שם.
 

itaysk

New member
הנה דוגמא

זה מה שגרם לי לשאול את השאלה, זה קטע קוד מתוך WSS 3.0 SDK
public EditMetadata(): base() { this.Init += new EventHandler(Page_Init); } private void Page_Init(object sender, System.EventArgs e) { ... //Add field control to the page control tree. }​
 

itaysk

New member
../images/Emo26.gif

אוקיי אז לפי מה שהבנתי מותר לקרוא רק לקונסטרקטורים של base ו this. נכון? מתי הקונסטרקטורים יפעלו? לפני הקוד? למה לקרוא להם בצורה כזאת ולא שפוט לקרוא להם מתוך גוף המתודה?
 

nadav1974

New member
זה של ה-base class ייקרא קודם

אין תחביר ב-C# שמאפשר לקרוא ל-constructor של base class מתוך פונקציה ללא operator new, ולכן אי אפשר לעשות את זה אחרת.
 

itaysk

New member
אוקיי תודה שאלה אחרונה

במקרה של overloading constructors שמתי לב שקוראים לקונסטרקטורים אחרים כמו שציינת ולא ע"י קריאה למתודה עצמה.לדוגמא, מה ההבדל בין שני הקריאות הנ"ל:
public class MyClass { public MyClass() { MyClass(i) } public MyClass() : this(i) { } public MyClass(int i) { } }​
?
 

nadav1974

New member
יש שם קצת בלגאן, זה לא יתקמפל

אבל בעיקרון זה תלוי מה בדיוק יש ב-constructors. אגב, תמיד ייקרא איזשהו constructor של ה-base. אם לא קוראים לו מפורשות, ייקרא ה-default constructor שלו, ואם ה-default constructor לא נגיש, יהיה error בזמן קומפילציה.
 
למעלה