use*_*224 3 c# .net-core c#-8.0 default-interface-member
我在 .NET Core 3.1 和 C# 8 中有这个简单的控制台程序:
using System;
namespace ConsoleApp34
{
public interface ITest
{
public void test()
{
Console.WriteLine("Bye World!");
}
}
public class Test : ITest
{
public void CallDefault()
{
((ITest)(this)).test();
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var t = new Test();
t.CallDefault();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么演员阵容是必要的 ((ITest)(this)).test();
Test 直接派生自 ITest,因此,根据定义,'this' 是 ITest
谢谢你。
默认接口实现的工作方式与显式实现类似:它们只能通过接口类型调用,而不能通过实现类型调用。
要理解为什么会这样,想象一下Test实现了 2 个具有相同方法签名的接口;如果没有演员表会使用哪个?
public interface ITest2
{
public void test()
{
Console.WriteLine("Hello World!");
}
}
public class Test : ITest, ITest2
{
public void CallDefault()
{
test(); // Do we use ITest.test() or ITest2.test()?
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |