mush0n פורסם 2008 ביולי 30 Share פורסם 2008 ביולי 30 טוב, יש לי כמה שאלות הבהרה שאני רוצה לשאול לגבי Polymorphism שאלה ראשונה, למה הוא טוב.. שאלה שניה, מאיפה שאני קורא עכשיו, נתקלתי בקוד הבא: { private string m_FirstName; private string m_LastName; public Person(string fn,string ln) { m_FirstName = fn; m_LastName = ln; } public void Print() { Console.WriteLine("Name = {0} {1} m_LastName, m_FirstName); }}class Employee:Person{ private float m_SalPerHour; private float m_WorkingHours; public Employee(string fn,string ln,float sal,float hours) :base(fn,ln) { m_SalPerHour = sal; m_WorkingHours = hours; } public new void Print() { base.Print(); Console.WriteLine("Salary = {0}", m_SalPerHour*m_WorkingHours); }}class App{ static void Main() { Person p = new Employee("Dutcha","Foigel",23.45f,190); p.Print(); }} class Person הוא אומר שברגע שהוא עשה Person p = new Employee("Dutcha","Foigel",23.45f,190); הOUTPUT היה רק 2 המשתנים הראשונים ולתקן את זה יש להוסיף PRIVATE וOVERRIDE. השאלה שלי היא, למה פשוט לא לעשות: Employee p = new Employee("Dutcha","Foigel",23.45f,190); ולסיים עם הסיפור? למה זה טוב לקחת מהBASE ולא מהDERIVED? מצטער על השאלה הם היא טיפשית, פשוט אני לא מצליח להבין אתה כל הקטע של הPOLY.. תודה רבה לעוזרים קישור לתוכן שתף באתרים אחרים More sharing options...
mandarin פורסם 2008 ביולי 30 Share פורסם 2008 ביולי 30 תחשוב שאתה רוצה לבדוק מי מבין 2 אנשים יותר גבוהה (לכל איש יש גובה), האם תכתוב 100 פעם קוד שבודק עבור כל סוגי האנשים (עובד, מובטל, וכו'), או שתכתוב פעם אחת קוד שמקבל טיפוס של אנשים ובודק. קישור לתוכן שתף באתרים אחרים More sharing options...
mush0n פורסם 2008 ביולי 30 מחבר Share פורסם 2008 ביולי 30 אוקי, ולשאלה השניה? קישור לתוכן שתף באתרים אחרים More sharing options...
mandarin פורסם 2008 ביולי 30 Share פורסם 2008 ביולי 30 תכתוב איך שאתה רוצה.. אם זה משהו שנועד להיות כללי, כדאי שגם המשתנה יהיה כללי. קישור לתוכן שתף באתרים אחרים More sharing options...
mush0n פורסם 2008 ביולי 31 מחבר Share פורסם 2008 ביולי 31 לא שאלתי אם זה בסדר לרשום ככה,אני שאלתי למה לא לרשום ככה, אם בTUTORIALS הוא רשם ככה ונתקל בטעות ובגללה הוא היה צריך להוסיף את המטודת בסיס VIRTUAL וOVERRIDE בDERIVED ואז לפתור את הבעיה,למה לא פשוט לרשום מה שאני רשמתי ולהמנע מכל זה?השאלה שלי נובעת בגלל שאני רוצה להבין למה הוא רשם את זה, בטוח יש סיבה כלשהי שאותה אני לא מצליח להבין,כי בסופו של דבר אני ארשום תוכנה זהה ואני רוצה לרשום אותה כמו שצריך קישור לתוכן שתף באתרים אחרים More sharing options...
mandarin פורסם 2008 ביולי 31 Share פורסם 2008 ביולי 31 תחשוב על מה שאמרתי קודם על הפונקציה שמקבלת 2 אנשים. נניח שאתה מעביר לה עובד אחד ואיש אחד והיא עכשיו משווה שכר. נניח שלכל איש יש שכר, כאשר היא באה להשוות את השכר (לקרוא למתודה שלהם) המערכת צריכה לדעת לאיזה מתודה לקרוא (לשכר של איש או לשכר של עובד) ובדיוק בשביל זה אתה צריך להגדיר את המתודה בתוך העובד כ new או override. אצל ההגדרת של האיש אתה חייב לשים אותה כ virtual כדי שהמערכת תדע בזמן ריצה שיש אופציה שאתה תעביר דברים שיורשים מאיש ולא רק איש ולכן בזמן ריצה היא תבדוק את התיפוס של המשתנה ולפי זה תחליט. קישור לתוכן שתף באתרים אחרים More sharing options...
mush0n פורסם 2008 ביולי 31 מחבר Share פורסם 2008 ביולי 31 אחי לא שאלתי למה אני צריך לשים את המטודה בVIRTUAL ואז NEW או OVERRIDE, כי את זה כבר הבנתי.שאלתי למה לא לרשום פשוט : [b]Employee [/b] p = new Employee("Dutcha","Foigel",23.45f,190);כי שאני מריץ את התוכנה היא עדיין לוקחת את הBASE לDERIVED משנה את מה שצריך והכל עובד.הבעיה מתחילה שאני מכריז על:[b]Person [/b] p = new Employee("Dutcha","Foigel",23.45f,190);ולכן השאלה שלי - למה לרשום PERSON ולא EMPLOYEE. קישור לתוכן שתף באתרים אחרים More sharing options...
mandarin פורסם 2008 ביולי 31 Share פורסם 2008 ביולי 31 כי גם אם תרשום Employee, אם יש לך מתודה static void Compare(Person p1, Person p2)ואתה מעביר לה Employee מה תעשה בדיוק ? קישור לתוכן שתף באתרים אחרים More sharing options...
mush0n פורסם 2008 ביולי 31 מחבר Share פורסם 2008 ביולי 31 הבנתי..אני דווקא נטתי לכייון של FOR שרץ בין כולם אז EMPLOYEE לא יעזור לי,אבל הדוגמא שלך קולעת בול.תודה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.