C# 重載(overload)與重寫(override)

1 重寫(override)

重寫(overload)指子類方法對基類虛方法的重寫。當基類中的方法被聲明爲虛方法(使用關鍵字virtual),該方法可以在任何子類中被重寫。若子類需要使用父類中原有的方法,可以使用base關鍵字,該關鍵字引用了當前類的父類。

示例代碼1:

class TestBaseClass
{
    public virtual void VirtualMethod()
    {
        Console.WriteLine("This Is Base Class's Virtual Method");
    }
}
 
class TestDerivedClass:TestBaseClass
{
    public override void VirtualMethod()
    {
        Console.WriteLine("This Is Derived Class's Virtual Method");
        base.VirtualMethod();
    }
}
 
static void Main(string[] args)
{
    TestDerivedClass testDerivedClass = new TestDerivedClass();
    testDerivedClass.VirtualMethod();
}

運行結果如下所示。

C#中屬性也可以被聲明爲virtual,成員字段與靜態函數都不能聲明爲virtual。

當基類和子類中都具有相同簽名的方法聲明,而沒有使用virtual關鍵字時,子類方法便會隱藏基類方法。子類隱藏基類的方式時,編譯器會進行提示:若是有意隱藏基類方法,請使用關鍵字new。

示例代碼2:

class TestBaseClass
{
    public void VirtualMethod()
    {
        Console.WriteLine("This Is Base Class's Virtual Method");
    }
}
 
class TestDerivedClass:TestBaseClass
{
    public new void VirtualMethod()//使用new關鍵字告訴編譯器隱藏基類方法
    {
        Console.WriteLine("This Is Derived Class's Virtual Method");
    }
}

2 重載(overload)

重載(overload)指在同一個類中的多個方法具有相同的方法名,參數列表卻不相同。

示例代碼3:

class OverloadExpClass
{
    public void ShowMessage(string title, string message)
    {
         Console.WriteLine(title + ":" + message);
    }
 
    public void ShowMessage(string title, string message,DateTime dateTime)
    {
         Console.WriteLine(title + ":" + message +" "+ dateTime.ToString());
    }
}
 
static void Main(string[] args)
{
    OverloadExpClass overloadExpClass = new OverloadExpClass();
    overloadExpClass.ShowMessage("title1", "message1");
    overloadExpClass.ShowMessage("title2", "message2",System.DateTime.Now);
}

運行結果如下所示

方法重載在開發中普遍使用,在.NET庫中也被廣泛使用。

轉自:https://blog.csdn.net/yl2isoft/article/details/16369291 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章