抽象类
来源:互联网 发布:ubuntu cacti 0.8.8h 编辑:程序博客网 时间:2024/05/22 13:32
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:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。
- 抽象类 抽象函数
- 抽象类、抽象方法
- 抽象类抽象方法
- 抽象类,抽象方法
- 抽象类,抽象方法
- 抽象方法,抽象类
- 抽象类、抽象方法
- 抽象类、抽象字段、抽象方法
- 抽象类、抽象方法、抽象属性
- 13.抽象类、抽象字段、抽象方法
- 抽象类
- 抽象类
- 抽象类
- 抽象类
- 抽象类
- 抽象类
- 抽象类
- 抽象类
- 生命的礼物
- 泛型
- Java引用
- C#--第九周实验--任务2--定义一个静态成员方法,该方法实现字符串反转。
- 闲聊linux中的input设备(9) 代代相传,何处是尽头
- 抽象类
- 49 wpf可以简单输入信息
- iframe实现无刷新上传下载
- hdu1166 敌兵布阵 +树状数组
- 闲聊linux中的input设备(10) 原来你也在这里
- 开始了
- C++对象大小讨论
- 电影网站的推广经验分享
- 函数返回值为引用类型