簡體   English   中英

使用:在 class 和接口上

[英]Using : on a class and interface

我想知道:符號或運算符的用法,你想如何調用它,在以下情況下:

第一個案例

public class Foo : IBar
{
     ...
}

在這種情況下class Foo實現接口IBar ,對嗎?


第二種情況

interface Foo : IBar
{
     ...
}

在這種情況下,接口Foo是實現接口IBar還是擴展它?

可以說,兩者都是擴展的情況:

  • 接口的情況下,它使用屬性和/或方法的新定義(如果有任何添加的話)擴展其他接口。

  • class的情況下,它使用屬性和/或方法的實現擴展接口(在抽象 class 的情況下,實現仍然可以是抽象的)。

這絕不是官方的,我只是認為這將是一個很好的描述方式。

然而,更常見的是,至少在.C#/NET世界中,當冒號兩邊都有接口時稱之為“繼承”,當左邊有一個class時稱之為“實現”+右邊有一個接口, 並在雙方都有類時再次“繼承”。

資料來源: https: //docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/ https: //docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-和結構/類

If you go by the intermediate language (IL) C# compiles into, the term "extends" is used when a class inherits from another class. 當 class 繼承一個接口並且一個接口繼承另一個接口時,使用術語“實現”。

C#:

namespace CSharpConsoleApp
{
    public interface InterfaceA
    {
    }

    public interface InterfaceB : InterfaceA
    {
    }

    public class ClassA
    {
    }

    public class ClassB : ClassA, InterfaceB
    {
    }
}

伊利諾伊州(刪節):

.class interface public abstract auto ansi CSharpConsoleApp.InterfaceA
{
}

.class interface public abstract auto ansi CSharpConsoleApp.InterfaceB
       implements CSharpConsoleApp.InterfaceA
{
}

.class public auto ansi beforefieldinit CSharpConsoleApp.ClassA
       extends [System.Runtime]System.Object
{
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // ...
  }

}

.class public auto ansi beforefieldinit CSharpConsoleApp.ClassB
       extends CSharpConsoleApp.ClassA
       implements CSharpConsoleApp.InterfaceB,
                  CSharpConsoleApp.InterfaceA
{
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // ...
  }

}

因此,“實現”一詞適用於您的兩種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM