C# 我们什么时候需要从一个由我们从中继承的类实现的接口重新继承?
编译器不会给出任何警告。所以这让我很好奇。我们什么时候需要从一个由我们从中继承的类实现的接口重新继承C# 我们什么时候需要从一个由我们从中继承的类实现的接口重新继承?,c#,C#,编译器不会给出任何警告。所以这让我很好奇。我们什么时候需要从一个由我们从中继承的类实现的接口重新继承 interface IFoo { void Any(); } class Foo : IFoo { public void Any() => Console.WriteLine("Foo"); } class Program : Foo, IFoo { static void Main() { IFoo ifoo = new Progra
interface IFoo
{
void Any();
}
class Foo : IFoo
{
public void Any() => Console.WriteLine("Foo");
}
class Program : Foo, IFoo
{
static void Main()
{
IFoo ifoo = new Program();
ifoo.Any();
Foo foo = new Program();
foo.Any();
Program program = new Program();
program.Any();
}
}
什么时候我们需要重新继承一个已经被修改过的接口
由我们从中继承的类实现
interface IFoo
{
void Any();
}
class Foo : IFoo
{
public void Any() => Console.WriteLine("Foo");
}
class Program : Foo, IFoo
{
static void Main()
{
IFoo ifoo = new Program();
ifoo.Any();
Foo foo = new Program();
foo.Any();
Program program = new Program();
program.Any();
}
}
这样做是完全有效的,然后在程序中显式地实现IFoo以获得不同的实现
例如:
using System;
interface IFoo
{
void Any();
}
class Foo : IFoo
{
public void Any() => Console.WriteLine("Foo");
}
class Program : Foo, IFoo
{
static void Main()
{
IFoo ifoo = new Program();
ifoo.Any();
Foo foo = new Program();
foo.Any();
Program program = new Program();
program.Any();
}
void IFoo.Any() => Console.WriteLine("Program");
}
这将输出:
Program
Foo
Foo
当然,这是不寻常的,很少使用。但这是一个例子,说明了为什么编译器允许类有效地重写接口实现是有帮助的。为什么会出现错误/警告?@mjwills:类似于隐藏,编译器会警告我们。但你警告你的原因是什么?你担心什么会出错?program.Any;你确定这会打印出来吗?你能解释一下这个行为吗?第一个写程序是因为程序告诉它通过接口实现。第二个写Any,因为Foo的Any方法就是这样做的。第三个写Any,因为程序缺少Any方法,看起来它有Any方法,但实际上没有-程序的Any方法仅用于显式接口实现。好的,当您无法控制Foo类并且无法使Any方法虚拟时,它可能会很有用。但是,与Foo-Foo=新程序的结果不同;IFoo IFoo=新程序;会让开发者哭泣吗