您的位置:首页 > 编程语言 > C#

C#抽象类和抽象方法

2012-03-16 14:26 399 查看
 

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上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:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# string class 任务