zoukankan      html  css  js  c++  java
  • C#抽象类

    一、抽象类

    1. 抽象类的定义

    使用abstract修饰符修饰的类只能用作基类,该类就称为抽象类。

    2. 抽象类的作用

    抽象类本身不能产生实例对象。

    3. 抽象类与非抽象类的区别

    ?抽象类只能作为其它类的基类,它不能被直接实例化,也不能使用new运算符。抽象类如果含有抽象的变量和值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。这里的非抽象类必须是从抽象类派生的。

    ?抽象类允许包含抽象成员,但不是必须的。

    ?抽象类不能被密封。

    ?抽象类可以包含抽象方法和访问器。

    4. 示例

    如果一个非抽象类从抽象类中派生,则其必须通过重写override关键字来实现所有继承而来的抽象成员。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Test
    {
        class Program
        {
            public abstract class A          // 抽象类
            {
                private string name;
                private int age;
                public string Name
                {
                    get { return name; }
                    set { name = value; }
                }
                public int Age
                {
                    get { return age; }
                    set { age = value; }
                }
                public abstract void show(); // 抽象方法
            }
            public class B : A               // 派生类
            {
                public override void show()  // 重写抽象类中的show方法
                {
                    Console.WriteLine("name:{0} age:{1}", Name, Age);
                }
            }
            static void Main(string[] args)
            {
                // C#抽象类-www.baike369.com
                B b = new B();              // 实例化派生类
                A a = b;                    // 使用派生类的对象b来实例化抽象类
                a.Name = "BaiXue";          // 使用抽象类对象访问抽象类中的name属性
                a.Age = 18;                 // 使用抽象类对象访问抽象类中的age属性
                a.show();                   // 使用抽象类对象调用抽象类中的抽象方法
                Console.ReadLine();
            }
        }
    }

    运行结果:

    name:BaiXue age:18

    上述代码通过派生类B的对象b来实例化抽象类,然后使用抽象类A的对象a来访问抽象类中的属性和方法。

    二、抽象方法

    抽象类包含了一个以上的抽象方法,这些抽象方法只是提供函数名称,函数体由继承的派生类实现,派生类必须同时实现所有抽象类的方法,否则其本身将会成为另外一个抽象类。

    抽象方法也是在抽象类中由abstract修饰符声明的,它不能使用static或virtual修饰符,而且方法不能有任何可执行代码。如:

    public abstract void show(); // 抽象类中的抽象方法在派生类中使用override关键字来重载抽象类(基类)所定义的方法。如:

    public override void show()  // 重写抽象类中的show方法
    {
        Console.WriteLine("name:{0} age:{1}", Name, Age);
    }

    如果一个方法被声明为抽象的,那么该方法默认也是一个虚方法。事实上,抽象方法是一个新的虚方法,它不提供具体的方法实现代码。

    抽象方法在派生类中不能使用base关键字进行访问。

  • 相关阅读:
    11.菜单(一)
    线性表之顺序存储详解
    SVN 撤回已提交的代码
    线性表1
    顶层父类
    异常类之派生类
    new和delete重载
    异常类之基类
    Qt中多线程问题
    智能指针实例
  • 原文地址:https://www.cnblogs.com/melao2006/p/4239239.html
Copyright © 2011-2022 走看看