Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C# 接口


接口

另一种在 C# 中实现 抽象 的方法是使用接口。

一个 interface 是一个完全的“**抽象类**”,它只能包含抽象方法和属性(没有方法体)。

示例

// interface
interface Animal 
{
  void animalSound(); // interface method (does not have a body)
  void run(); // interface method (does not have a body)
}

建议将接口名称以“I”开头,这可以帮助您和其他开发人员更容易地记住它是一个接口而不是一个类。

默认情况下,接口的成员是 abstractpublic

**注意:** 接口可以包含属性和方法,但不能包含字段。

要访问接口方法,必须通过另一个类“实现”(类似于继承)接口。要实现接口,使用 : 符号(就像继承一样)。接口方法的方法体由“实现”类提供。请注意,在实现接口时,不需要使用 override 关键字。

示例

// Interface
interface IAnimal 
{
  void animalSound(); // interface method (does not have a body)
}

// Pig "implements" the IAnimal interface
class Pig : IAnimal 
{
  public void animalSound() 
  {
    // The body of animalSound() is provided here
    Console.WriteLine("The pig says: wee wee");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
  }
}

自己试试 »

关于接口的说明

  • 与 **抽象类** 类似,接口 **不能** 用于创建对象(在上面的示例中,不可能在 Program 类中创建一个“IAnimal”对象)。
  • 接口方法没有方法体 - 方法体由“实现”类提供。
  • 在实现接口时,必须覆盖所有方法。
  • 接口可以包含属性和方法,但不能包含字段/变量。
  • 接口成员默认是 abstractpublic
  • 接口不能包含构造函数(因为它不能用于创建对象)。

为什么要使用接口?什么时候使用接口?

1) 实现安全性 - 隐藏某些细节,只显示对象的必要信息(接口)。

2) C# 不支持“多重继承”(一个类只能继承自一个基类)。但是,可以通过接口实现多重继承,因为类可以 **实现** 多个接口。**注意:** 要实现多个接口,请用逗号分隔它们(请参阅下面的示例)。


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.