繼承類和base,override,virtual 的…

base其實最大的使用地方在面相對性開發的多態性上,

base可以完成創建派生類實例時調用其基類構造函數或者調用基類上已被其他方法重寫的方法。 
基類,就好像人類的祖先一樣
派生類,就是繼承了祖先特色的子孫

1.關於base調用基類構造函數
public class A

     public   A()
      {
            Console.WriteLine( "Build   A ");
      }
}
public class B:A  //繼承A類
{
       public B():base()
        {
              Console.WriteLine( "Build   B ");
        }
}
如果創建一個B的實例對象,獲得結果將是同時打印Build   A和Build   B.

 
2.base在派生類中調用基類的方法。
public class A
{

      //virtual的使用,在它的基類不能有函數簽名相同的方法,

      //否則系統將提示添加new,即隱藏基類中的方法
     public virtual void Hello()
      {
              Console.WirteLine( "Hello ");
      }
}
public class B : A //繼承A類
{

      //override 方法提供從基類繼承的成員的新實現

     //通過 override 聲明重寫的方法稱爲重寫基方法。

     //重寫的基方法必須與 override 方法具有相同的簽名


     public override void Hello()
      {
            base.Hello();  //調用基類的方法,顯示Hello
            Console.WirteLine( "World ");
      }
}

這樣如果用其他程序調用B.Hello()獲得的效果將會使Hello   World

舉例說明:

類庫裏class1類代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace pageNew
{
    public class Class1 : System.Web.UI.Page
    {
        protected override void OnInit(EventArgs e)
        {
            if (Session["Name"] == null)
            {
                Response.Write("admin_login.aspx");
            }

            base.OnInit(e);
        }
    }
}

web頁面default.aspx.cs代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using pageNew;


public partial class _Default : pageNew.Class1
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

當某個頁面想判斷session是否有值時,就繼承pageNew.Class1,

當不想讓給頁面判斷session是否有值時,就繼承system.web.ui.page

發佈了112 篇原創文章 · 獲贊 2 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章