抽象類

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace 抽象類和抽象方法
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Control[] controls = new Control[2];
            controls[0] = new RectangleControl(0, 0, 100, 100);
            controls[1] = new RectangleControl(500, 500, 100, 100);
            for (int i = 0; i < 2; i++)
            {
                Response.Write(controls[i].Tellinfo());
                Response.Write("<br>");
            }


        }
    }
    #region //抽象類
    abstract class Control //抽象類
    {
        protected int nHeight = 0, nWidth = 0, nLeft = 0, nTop = 0; //只能被繼承類訪問
        public int Height //屬性
        {
            get
            {
                return nHeight;
            }
            set
            {
                nHeight = value;
            }
        }
        public int Width
        {
            get
            {
                return nWidth;
            }
            set
            {
                nWidth = value;
            }
        }
        public int Left
        {
            get
            {
                return Left;
            }
            set
            {
                nLeft = value;
            }
        }
        public int Top
        {
            get
            {
                return nTop;
            }
            set
            {
                nTop = value;
            }
        }
        public Control(int nh, int nw, int nl, int nt) //構造函數
        {
            nWidth = nw;
            nHeight = nh;
            nLeft = nl;
            nTop = nt;
        }
        public abstract string Tellinfo(); //抽象方法定義,返回控件信息.注:抽象類的方法只能這樣些,因爲它無法聲明主體。
    }
    #endregion
    #region //繼承類,矩形
    class RectangleControl : Control
    {
        public RectangleControl(int nh, int nw, int nl, int nt)     //構造函數
            : base(nh, nw, nl, nt)
        {
           
        }
        public override string Tellinfo()  //重寫抽象方法
        {
            string str = "矩形左上角座標(x,y)爲(" + nLeft.ToString()+ "," + nTop.ToString() + ")" + "矩形高度:" + nHeight.ToString() + "矩形寬度:" + nWidth.ToString();
            return str;
        }
    }
    #endregion
    #region //繼承類,圓形
    class CircleControl : Control
    {
        public CircleControl(int nh, int nw, int nl, int nt) //構造函數
            : base(nh, nw, nl, nt)
        {
       
        }
        public override string Tellinfo()   //重寫抽象方法
        {
            string str = "圓或者橢圓控件左上角座標(x,y)爲(" + nLeft.ToString() + "," + nTop.ToString() + ")" + "高度:" + nHeight.ToString() + "寬度:" + nWidth.ToString();
            return str;
        }
    }
    #endregion
}

 

C#抽象類和抽象方法(轉載)

如果一個類不與具體的事物相聯繫,而只是表達一種抽象的概念,僅僅是作爲其派生類的一個基類,這樣的類就是抽象類,在抽象類中聲明方法時,如果加上abstract時就是抽象方法

1.抽象類概述及聲明

抽象類與非抽象類的主要區別:

·抽象類不能直接被實例化

·抽象類中可以包含抽象成員,但非抽象類中不可以

·抽象類不能被密封

舉個小例子

public abstract class oneClass

{

  public int i;

  public void denylau()

  {

  }

}

2.抽象方法概述及聲明

聲明抽象方法時需注意:·抽象方法必須聲明在抽象類中  ·聲明抽象方法時,不能使用virtual、static、private修飾符。

在抽象類中抽象方法不提供實現。

如:

public abstract class myTestClass()

{

  public abstract void method();

}

3.抽象類與抽象方法的使用

直接舉例子,講解例子嘍!

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
    public abstract class myClass
    {
        private string id = "";
        private string name = "";
        /// <summary>
        /// 編號屬性及實現
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// <summary>
        /// 姓名屬性及實現
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 抽象方法,用來輸出信息
        /// </summary>
        public abstract void ShowInfo();
    }
    public class DriveClass:myClass                     //繼承抽象類
    {
        /// <summary>
        /// 重寫抽象類中輸出信息的方法
        /// </summary>
        public override void ShowInfo()
        {
            Console.WriteLine(ID + " " + Name);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DriveClass driveclass = new DriveClass();   //實例化派生類
            myClass myclass = driveclass;               //使用派生類對象實例化抽象類
            myclass.ID = "BH0001";                      //使用抽象類對象訪問抽象類中的編號屬性
            myclass.Name = "TM";                        //使用抽象類對象訪問抽象類中的姓名屬性
            myclass.ShowInfo();                         //使用抽象類對象調用抽象類中的的抽象方法
        }
    }
}

上例中通過派生類的對象driveclass來實例化抽象類,然後使用抽象類訪問抽象類中的屬性及方法。

上面這個小例子,細心的朋友會發現,怎麼抽象類和我們上一篇文章講的接口差不多嗎?那麼究竟抽象類和接口存在哪些區別呢?

Ok,下面就介紹下抽象類和接口的區別嘍:

·它們的派生類只能繼承一個基類,即只能繼承一個抽象類,但是可以繼承多個接口。

·抽象類中可以定義成員的實現,但接口中不可以。

·抽象類中包含字段、構造函數、析構函數、靜態成員或常量等,接口中不可以。

·抽象類中的成員可以私有的(只要不是抽象的)、受保護的、內部的或受保護的內部成員,但接口中的成員必須是公共的。

PS:抽象類和接口這兩種類型用於完全不同的目的。抽象類主要用作對象系列的基類,共享某些主要特性,例如共同的目的和結構。接口則主要用於類,這些類在基礎水平上有所不同,但仍然可以完成某些相同的任務。

 

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