zoukankan      html  css  js  c++  java
  • 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:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。 (例如: 接口,数据库sqlserver和oracle支持;抽象类,抽象工厂模式,共享某些特性)

  • 相关阅读:
    Marshal Code Into Another Thread(STAThread)
    MongoDB分片实战(二):Sharding
    项目中如何添加CorePlot开源框架(重温Xcode链接静态库)
    Xcode4.2中将Three20开源库导入到工程项目中
    Ajax在MVC中的使用
    位枚举的学习
    MVC3+NHibernate项目实战(二) :数据库访问层
    MVC3+NHibernate项目实战(一) :项目设计
    Android VideoView
    00设计原则
  • 原文地址:https://www.cnblogs.com/yuanws/p/2216232.html
Copyright © 2011-2022 走看看