none
:base( )程式觀念釐清 RRS feed

  • 問題

  • 在 public USACustomer 後面有個繼承 :base()
    這樣的方式中文解釋為調用父類別
    好心的撲友說:
    B 繼承 A產生一個Instance C ,然後B Class有個方法是Override Class A,假設此方法名稱為 paint(),當你調用父類別呼叫paint() Mathod時, 表示它會執行的是 A:paint() 而不是 B:paint()
    雖然說得很清楚,但問題還是要真正去了解透徹才好~
    所以想請問各位大大們知道ABC在這段程式是指誰嗎??






     public class USACustomer
        {
            private string _id;
            private string _firstName;
            private string _lastName;
            private int _salary;
            private DateTime _birthday;
            private DateTime _hireDate;
     
            public USACustomer(string ID, string first, string last, int salary, DateTime birthday, DateTime hireDate) : base()        
            {
                this._id = ID;
                this._firstName = first;
                this._lastName = last;
                this._salary = salary;
                this._birthday = birthday;
                this._hireDate = hireDate;
            }
     
            public string ID
            {
                get
                {
                    return _id;
                }
            }
     
            public string FirstName
            {
                get
                {
                    return _firstName;
                }
     
                set
                {
                    if(String.IsNullOrEmpty(value.Trim()))
                    {
                        throw new ArgumentException("人員必須擁有一個名字");
                    }
                    else
                    {
                        _firstName = value;
                        OnFirstNameChanged(EventArgs.Empty);
                    }
                }
            }
     
            public string LastName
            {
                get
                {
                    return _lastName;
                }
     
                set
                {
                    if(String.IsNullOrEmpty(value.Trim()))
                    {
                        throw new ArgumentException("人員必須擁有一個姓氏");
                    }
                    else
                    {
                        _lastName = value;
                        OnLastNameChanged(EventArgs.Empty);
                    }
                }
            }
     
            public int Salary
            {
                get
                {
                    return _salary;
                }
     
                set
                {
                    if(value < 500)
                    {
                        throw new ArgumentException("薪資必須大於 500 美金");
                    }
                    else
                    {
                        _salary = value;
                        OnSalaryChanged(EventArgs.Empty);
                    }
                }
            }
     
            public DateTime Birthday
            {
                get
                {
                    return _birthday;
                }
     
                set
                {
                    if(value > DateTime.Now.AddYears(-18))
                    {
                        throw new ArgumentException("年齡必須滿 18 歲");
                    }
                    else
                    {
                        _birthday = value;
                        OnBirthdayChanged(EventArgs.Empty);
                    }
                }
            }
     
            public DateTime HireDate
            {
                get
                {
                    return _hireDate;
                }
     
                set
                {
                    _hireDate = value;
                    OnHireDateChanged(EventArgs.Empty);
                }
            }
     
            public override string ToString()
            {
                StringWriter sb = new StringWriter();
     
                sb.Write(this._firstName);
                sb.Write(" ");
                sb.Write(this._lastName);
                sb.Write(" ");
                sb.Write(this._salary.ToString());
     
                return sb.ToString();
            }
     
            public static IList<USACustomer> GetCustomers()
            {
                List<USACustomer> usacustomers = new List<USACustomer>();
     
                usacustomers.Add(new USACustomer("EMP-18103""Otis""Redding", 2200, DateTime.Parse("08/01/1977"), DateTime.Now));
                usacustomers.Add(new USACustomer("EMP-19448""James""Brown", 2100, DateTime.Parse("11/25/1967"), DateTime.Parse("12/12/1963")));
                usacustomers.Add(new USACustomer("EMP-21542""Aretha""Franklin", 3000, DateTime.Parse("01/11/1975"), DateTime.Parse("5/27/1995")));
                usacustomers.Add(new USACustomer("EMP-23987""Louis""Armstrong", 2900, DateTime.Parse("12/25/1970"), DateTime.Parse("8/18/1993")));
                usacustomers.Add(new USACustomer("EMP-24003""Billie""Holiday", 2900, DateTime.Parse("04/30/1980"), DateTime.Parse("7/10/1964")));
                usacustomers.Add(new USACustomer("EMP-00325""Elvis""Presley", 1800, DateTime.Parse("06/16/1986"), DateTime.Parse("6/3/1999")));
     
                return usacustomers;
            }
     
            public event EventHandler FirstNameChanged;
     
            protected virtual void OnFirstNameChanged(EventArgs e)
            {
                FirstNameChanged(this, e);
            }
     
            public event EventHandler LastNameChanged;
     
            protected virtual void OnLastNameChanged(EventArgs e)
            {
                LastNameChanged(this, e);
            }
     
            public event EventHandler SalaryChanged;
     
            protected virtual void OnSalaryChanged(EventArgs e)
            {
                SalaryChanged(this, e);
            }
     
            public event EventHandler BirthdayChanged;
     
            protected virtual void OnBirthdayChanged(EventArgs e)
            {
                BirthdayChanged(this, e);
            }
     
            public event EventHandler HireDateChanged;
     
            protected virtual void OnHireDateChanged(EventArgs e)
            {
                HireDateChanged(this, e);
            }
        }
    }
    
    2011年7月1日 上午 05:22

解答

  • 你上面程式的 :base()  會引發 Object類別的無參數建構函式, 只是恰巧沒做什麼. 而且那是不必要的

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年7月1日 上午 06:05
    版主
  • 物件實體化的時候會呼叫父類別的建構子

    :base就是指定要呼叫父類別的哪一個建構子

     

     

    之前有買過免螞煩,印象中挺管用的。

    2011年7月1日 上午 06:08
  • 所有的物件都繼承自 System.Object

    所以

    A: System.Object

    B: USACustomer

    C:

    new USACustomer("EMP-18103""Otis""Redding", 2200, DateTime.Parse("08/01/1977"), DateTime.Now)

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年7月1日 上午 06:31

所有回覆

  • 你貼的程式完全沒有繼承耶
    2011年7月1日 上午 05:26
  • 我照書copy的~因為我很少在書中看到 :base( )  .....所以想問問這是什麼意思
    2011年7月1日 上午 05:33
  • public class ItemA
        {
            public ItemA() { }
            public ItemA(string name)
            {
                Name = name;
            }
            public string Name { get; set; }
        }
        public class ItamB:ItemA
        {
            public ItamB()
            {
            }
            public ItamB(string name)
                : base(name)
            {
            }
            public ItamB(string name, int width)
                : this(name)
            {
                Width = width;
            }
            public int Width { get; set; }
        }
    這樣子嘛
    2011年7月1日 上午 05:49
  • http://msdn.microsoft.com/zh-tw/library/hfw7t1ce.aspx

     

     

    或許這書上,是誤加了吧~~這解釋比較清楚 跟各位參考 ~

    (話說我們公司桌上螞蟻怎麼那麼多,螞蟻跑進我的NB了~螞蟻會不會把我的NB搬走ㄋ............) 

    2011年7月1日 上午 05:50
  • 你上面程式的 :base()  會引發 Object類別的無參數建構函式, 只是恰巧沒做什麼. 而且那是不必要的

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年7月1日 上午 06:05
    版主
  • 物件實體化的時候會呼叫父類別的建構子

    :base就是指定要呼叫父類別的哪一個建構子

     

     

    之前有買過免螞煩,印象中挺管用的。

    2011年7月1日 上午 06:08
  • 感謝各位大師的解釋~今天星期五~大家放輕鬆了嗎~^^

     

    PS:螞蟻快把我NB搬走吧~這樣我就輕鬆了~

    2011年7月1日 上午 06:14
  • 所有的物件都繼承自 System.Object

    所以

    A: System.Object

    B: USACustomer

    C:

    new USACustomer("EMP-18103""Otis""Redding", 2200, DateTime.Parse("08/01/1977"), DateTime.Now)

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年7月1日 上午 06:31