[英]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.