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支持;抽象类,抽象工厂模式,共享某些特性)

  • 相关阅读:
    KnockoutJS 3.X API 第五章 高级应用(4) 自定义处理逻辑
    KnockoutJS 3.X API 第五章 高级应用(3) 虚拟元素绑定
    KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定
    KnockoutJS 3.X API 第五章 高级应用(1) 创建自定义绑定
    KnockoutJS 3.X API 第四章(14) 绑定语法细节
    KnockoutJS 3.X API 第四章(13) template绑定
    KnockoutJS 3.X API 第四章 表单绑定(12) selectedOptions、uniqueName绑定
    KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
    KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定
    KnockoutJS 3.X API 第四章 表单绑定(9) value绑定
  • 原文地址:https://www.cnblogs.com/yuanws/p/2216232.html
Copyright © 2011-2022 走看看