C# 接口interface、Virtual方法(虚方法)、Abstract方法(抽象方法)

一、Virtual方法(虚方法)

     virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:

     情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。

     情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

二、Abstract方法(抽象方法)

     abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。

1、接口interface

public interface IPerson

        {

            void getName2(string s);//不包含方法主体

            object getName4();//不包含方法主体

        }

        public class Chinese : IPerson

        {

          public void getName2( string s)

            {

            }

            public string getName3()

            {

                return "111";

            }

            public object getName4()

            {

                return (object)"11";

            }

        }

//接口IPerson中方法不能用public abstract static 等修饰,无字段变量,无构造函数。

//类Chinese 必须实现 IPerson中的各个方法

2、abstract:声明抽象类、抽象方法

1.抽象方法所在类必须为抽象类

2.抽象类不能直接实例化,必须由其派生类实现。

3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似。

public abstract class Book2

        {

            public Book2()

            {

            }

            public abstract void getPrice(); //抽象方法,不含主体

            public virtual void getName() //虚方法,可覆盖

            {

                MessageBox.Show("this is a test:virtual getName()");

            }

            public virtual void getContent() //虚方法,可覆盖

            {

                MessageBox.Show("this is a test:virtual getContent()");

            }

            public void getDate() //一般方法,若在派生类中重写,须使用new关键字

            {

                MessageBox.Show("this is a test: void getDate()");

            }

        }

        public class JavaBook2 : Book2

        {

            public override void getPrice() //实现抽象方法,必须实现

            {

                MessageBox.Show("this is a test:JavaBook2 override abstract getPrice()");

            }

            public override void getName() //覆盖原方法,不是必须的

            {

                MessageBox.Show("this is a test:JavaBook2 override virtual getName()");

            }

        }

3、virtual:标记方法为虚方法

1.可在派生类中以override覆盖此方法

2.不覆盖也可由对象调用

3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法

abstract 与virtual : 方法重写时都使用 override 关键字

接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。

接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法;

转载自:https://www.cnblogs.com/vaevvaev/p/6911788.html

你可能感兴趣的:(C# 接口interface、Virtual方法(虚方法)、Abstract方法(抽象方法))