还有具体的方法

时间:2021-12-14 03:44:44

首先,在学习抽象要领的时候,我们必需清楚在C#中为什么会存在抽象要领,或者说为什么需要抽象要领。

我们知道,接口可以包罗要领的申明和属性,但是要领中不包罗代码,实现这个接口的要领必需包罗接口中的所有要领和属性,但是此刻呈现这种情况,假设需要一个“接口”,要求类实现某些要领和属性,但是需要这这个“接口”中包罗一些代码,从而不必在每个派生类中反复地实现某些要领,对付这种情况,你需要的不是接口,而是一个抽象类(abstract class)。

凭据界说,抽象类和一般的类有异同,和接口也有异同。下面笔者将一一为您揭晓。

一、抽象类和一般类的不异点:都可以担任其他的类或者接口,也可以派生子类,并且都有具体的要领;

差别点:抽象类中有抽象要领,一般类中没有;抽象类不成以实例化,,一般类却可以;

二、抽象类和接口的不异点:都不能实例化,担任抽象类的子类必需实现抽象类中的抽象要领,实现接口的子类必需实现接口中的全部要领和属性。

差别点:抽象类中除了具有抽象要领之外,还有具体的要领。

抽象类与一般类、接口在代码暗示上有所差别:

1、抽象类:abstract class class_abstract_name;

2、一般类:class class_name;

3、接口:interface interface_name;

4、抽象要领:abstract public void test();或者public abstract void test();//抽象要领中必需使用public修饰符。

5、一般要领:public/private/protected/.. void/string/int/... method_name();

6、父类中的虚拟要领:public virtual void test_1();或者virtual public void test_1();//虚拟要领必需使用public修饰符。

7、子类中实现父类的虚拟要领或抽象要领:public override void test_1();或者override public void test_1();

注意:

只有抽象类可以有抽象要领,不过抽象类可以有具体要领。如果把一个抽象要领放在一个类中,就必需标识这个类为抽象类。

实例代码如下:

[csharp]  

 

using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Text;  

using System.Threading.Tasks;  

  

namespace testOverride  

{  

    class Program  

    {  

        static void Main(string[] args)  

        {  

            Test test = new Test();  

            test.test();  

            test.test_1();  

            test.test_2();//父类中有,子类中没有的要领,子类依然可以用  

            Console.ReadKey();  

        }  

    }  

    abstract class method_abstract  

    {  

        abstract public void test();  

        virtual public void test_1() {  

            Console.WriteLine("This is the test 2.");  

        }  

        public void test_2() {  

            Console.WriteLine("This is the test 3.");  

        }  

    }  

    interface Interface  

    {  

        //接口中的要领和属性都是public,因此不必输入public  

        void test();  

        string test_String { get; set; }//这是接口中的属性  

    }