我有一个使用C# 8和.NET Core 3.1编写的简单控制台程序:
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();
}
}
}
我不明白为什么在这行代码中需要进行强制类型转换:((ITest)(this)).test();
因为Test直接继承自ITest,所以根据定义,“this”就是ITest。
谢谢。
ITest.test();
已经用于静态接口方法。虽然在您的特定示例中没有歧义,但编译器需要能够解释每种情况,包括许多边缘情况。直接调用test()
安全的唯一情况是只实现了一个接口;在 .NET 中,这就是类仅允许单一继承的原因,但接口应始终允许共存而不必担心冲突。 - Johnathan BarclayTest
实现了ITest2
之后,ITest2
添加了test
方法会怎样呢? - Johnathan BarclayGetMode
方法都会有效地隐藏扩展方法。 - Johnathan Barclay