首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C# 面向对象 接口(interface)和虚方法(virtual)

C# 面向对象 接口(interface)和虚方法(virtual)

作者头像
用户11754185
发布2025-12-16 18:05:41
发布2025-12-16 18:05:41
1900
举报

 C# 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。本文主要介绍C# 面向对象 接口(interface)和虚方法(virtual)。

1、C# 接口(interface) 在C#中实现抽象的另一种方法是使用接口(interface)。接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,C#不支持多重继承。有了接口,就可以得到多重继承的效果。下面看一下接口使用示例。

代码语言:javascript
复制
   // interface
interface Animal {
  void Eat(); // 接口方法(没有实现)
  void Run(); // 接口方法(没有实现)
}

要访问接口方法,必须实现接口 (有点像继承的),也是使用:。例如

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace cjavapy {     // Interface     interface Animal     {         void Eat();   // 接口方法(没有实现)         void Sleep(); // 接口方法(没有实现)     }     // Cat 实现 Animal 接口     class Cat : Animal     {         public void Eat()         {             // 这里提供了eat()的实现             Console.WriteLine("吃鱼");         }         public void Sleep()         {             // 这里提供了sleep()的实现             Console.WriteLine("Zzz");         }     }     class Program     {         static void Main(string[] args)         {             Cat myCat = new Cat();  // 创建Cat对象             myCat.Eat();             myCat.Sleep();         }     } }

2、实现多个接口

要实现多个接口,需要用逗号分隔它们:

例如,

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cjavapy
{
    interface FirstInterface
    {
        void MyMethod(); // 接口方法
    }
    interface SecondInterface
    {
        void MyOtherMethod(); // 接口方法
    }
    class DemoClass : FirstInterface, SecondInterface
    {
        public void MyMethod()
        {
            Console.WriteLine("myMethod");
        }
        public void MyOtherMethod()
        {
            Console.WriteLine("myOtherMethod");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DemoClass myObj = new DemoClass();
            myObj.MyMethod();
            myObj.MyOtherMethod();
        }
    }
}
3、虚方法

virtual 关键字用于修饰方法或属性的声明,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写实现。相对于接口,虚方法可以不被重写,定义方法时能够有自己的方法体。虚方法默认是有实现的。例用示例如下,

代码语言:javascript
复制
using System;
namespace VirtualMethodTest
{
    class BaseAnimal
    {
        public virtual void Func() // 注意virtual,表明这是一个虚方法
        {
            Console.WriteLine("I am baseAnimal");
        }
    }
    class Animal: BaseAnimal 
    {
        public override void Func() // 注意override ,表明重新实现了虚函数
        {
            Console.WriteLine("I am Animal");
        }
    }
    class Cat : Animal
    {
    }
    class Dog : BaseAnimal 
    {
        public new void Func() // 注意new ,表明覆盖父类里的同名方法,而不是重新实现
        {
            Console.WriteLine("I am Dog");
        }
    }
    class program
    {
        static void Main()
        {
            BaseAnimal a;         
            BaseAnimal b;       
            BaseAnimal c;  
            BaseAnimal d; 
            a = new BaseAnimal(); 
            b = new Animal();
            c = new Cat(); 
            d = new Dog(); 
            a.Func();    
            b.Func();    
            c.Func(); 
            d.Func();    
            Dog d1 = new Dog();
            d1.Func(); 
            Console.ReadLine();
        }
    }
}

4、虚方法与接口的区别 虚方法与抽象方法都能被重写,抽象方法只能存在于抽象类中,虚方法既可以存在于抽象类中,也可以存在非抽象类中。继承虚方法的类可以重写虚方法也可以选择不重写虚方法,但是抽象方法必须要重写,不然编译会报错。抽象方法是虚方法的一种特殊情况,他的特点在于定了一个规则,他的子类必须遵循这一规则。抽象类运用场景一般在于一个方法是流程里面必要的方法,但是这个方法根据具体情况有多重不一样的实现方法,此时就可以用抽象方法。

5、抽象类与接口的区别 抽象方法与接口都是定义了一种规则,继承他们的类都必须遵循这一规则。抽象类也是类,类所有的特性他都有,接口则不然。抽象类里面可以有非抽象成员,但是接口里面只能有抽象成员,所有成员默认是abstract,类实现继承的时候最多只能继承一个类(抽象类、非抽象类)但是可以继承多个接口。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、实现多个接口
  • 3、虚方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档