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关键字进行访问。

原文地址:https://www.cnblogs.com/melao2006/p/4239239.html