区分C#中的Abstract函数和Virtual函数

原创 2006年05月30日 10:47:00

 

版权声明:

 

本文由timewolf完成,首发于CSDN,作者保留版权。
未经许可,不得使用于任何商业用途。
欢迎转载,但请保持文章及版权声明完整。
如需联络请发邮件:karla9(AT)eyou(dot)com

发现很多朋友对于C#中的Abstract和Virtual函数区分得不是很清楚,下面我通过两段代码让大家看看这两者之间到底有什么区别~~

开发环境: VS.net 2005

使用方法: 用以下代码覆盖program.cs中的代码,然后run即可

第一段代码: Abstract的用法

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    public abstract class Book
    {
        //抽象方法,不含主体,抽象方法所在类必须为抽象类,派生类必须实现该方法
        public abstract void Introduce();
    }

    public interface iBook
    {
    }

    public class JavaBook : Book
    {
        //实现抽象方法,必须实现,必须添加override关键字
        public override void Introduce()
        {
            Console.WriteLine("I'm Java");
        }

//            // Compile Error
//            public void Introduce()
//            {
//                Console.WriteLine("I'm Java");
//            }
    }


    public class test
    {
        public test()
        {
            JavaBook javaBook = new JavaBook();
            javaBook.Introduce();      //将调用JavaBook中Introduce()
            Book book = new JavaBook();
            book.Introduce();      //将调用JavaBook中Introduce()
        }
        public static void Main()
        {
            test t = new test();
        }
    }
}

第二段代码: Virtual的用法以及override的用法

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    public abstract class Book
    {
        public virtual void Introduce()
        {
            Console.WriteLine("I'm book");
        }

        public virtual void SayHi()
        {
            Console.WriteLine("Hi, I'm book");
        }
    }


    public class JavaBook : Book
    {
        public override void Introduce()
        {
            Console.WriteLine("I'm Java");
        }

        //注意,此方法没有override父类的方法
        public void SayHi()
        {
            Console.WriteLine("Hi, I'm Java");
        }
    }


    public class test
    {
        public test()
        {
            JavaBook javaBook = new JavaBook();
            Book book = new JavaBook();
            javaBook.Introduce();       //将调用JavaBook中Introduce()
            book.Introduce();       //将调用JavaBook中Introduce()

            javaBook.SayHi();      //将调用JavaBook中SayHi()
            book.SayHi();           //将调用Book中SayHi()
        }

        public static void Main()
        {
            test t = new test();
        }
    }
}

 

第三段代码: new的用法

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication4
{
    public abstract class Book
    {
        public void Introduce()
        {
            Console.WriteLine("I'm book");
        }

        public void SayHi()
        {
            Console.WriteLine("Hi, I'm book");
        }
    }


    public class JavaBook : Book
    {
        // 没有加new,但C#默认行为会加上new
        public void Introduce()
        {
            Console.WriteLine("I'm Java");
        }

        // 显式加上new,跟不加new实际效果一样,只是加new之后会消除compile warning
        public new void SayHi()
        {
            Console.WriteLine("Hi, I'm Java");
        }
    }


    public class test
    {
        public test()
        {
            JavaBook javaBook = new JavaBook();
            Book book = new JavaBook();

            javaBook.Introduce();       //将调用JavaBook中Introduce()
            javaBook.SayHi();           //将调用JavaBook中SayHi()
           
            book.Introduce();       //将调用Book中Introduce()
            book.SayHi();           //将调用Book中SayHi()
        }
        public static void Main()
        {
            test t = new test();
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

区分C#中的Abstract函数和Virtual函数

发现很多朋友对于C#中的Abstract和Virtual函数区分得不是很清楚,下面我通过两段代码让大家看看这两者之间到底有什么区别~~ 开发环境: VS.net 2005 使用方法: 用以下代码覆...

[C#基础知识]关于虚函数Virtual 及 抽象函数Abstract

Virtual 虚函数是多态的前提和保证   被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。   没有标注为virtual的非虚方...

C#中修饰符用法“virtual(虚拟函数)、override(函数复写)、static(静态函数)、abstract(抽象函数)、sealed(密封函数)”

1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。 声...

Return to the Basic - 纯虚函数(pure virtual)和抽象类(abstract class)

纯虚函数(pure virtual function)是指在基类中声明但是没有定义的虚函数。 通用形式: virtual type func-name(parameter-list)=0; ...

关于基类中函数修饰符abstract和virtual的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...

C#虚函数virtual详解1

本文对C#虚函数virtual进行详解。   一、OOP的目标   使用面向对象的开发过程就是在不断地抽象事物的过程,我们的目标就是抽象出一个高内聚、低偶合,易于维护和扩展的模型。   ...

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base、this、new、override、abstract、virtual以及针对static字...

c#中abstract、override、new、virtual、sealed使用和示例

abstract      修饰类名为抽象类,修饰方法为抽象方法。如果一个类为抽象类,则这个类智能是其他某个类的基类。抽象方法在抽象类中没有函数体。抽象类中的抽象方法是没有方法体的,继承其的子类必须...

C#修饰符stattic、virtual、abstract、override、sealed、extern

static 用于所有成员(函数,类、方法、属性)成员不作用于类的具体实例。因此不需要实例化。 创建的一个Test1类里面包含static静态的属性和方法 using System; using S...

c#中abstract、override、new、virtual、sealed使用和示例

abstract      修饰类名为抽象类,修饰方法为抽象方法。如果一个类为抽象类,则这个类智能是其他某个类的基类。抽象方法在抽象类中没有函数体。抽象类中的抽象方法是没有方法体的,继承其的子类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)