提问人:Jack Maloney 提问时间:11/15/2023 最后编辑:Guru StronJack Maloney 更新时间:11/16/2023 访问量:87
实现所有类型的接口 实现另一个接口 C#
Implement interface for all types implementing another interface C#
问:
是否可以为在 C# 中实现另一个接口的所有类型实现一个接口?例如
interface A {
void foo();
}
interface B {
void bar();
}
现在我想为实现的所有类型提供一个实现。这可能吗?我想要的是,任何类型也将自动被视为 的实现者,即 。B
A
C:A
B
C:B
例如,这在 Rust 中被称为“impl trait for trait”。https://users.rust-lang.org/t/implementing-trait-for-trait/13810
答:
2赞
Guru Stron
11/15/2023
#1
C# 不直接支持特征(至少在我对该主题的理解中),但您可以使用默认接口方法在某种程度上模拟它。在这种情况下,您可以使用显式默认接口实现,这将在一定程度上解决问题:
interface IA : IB {
void Foo();
void IB.Bar() => Console.WriteLine("B implemented in A");
}
interface IB {
void Bar();
}
class MyAWithB : IA
{
public void Foo()
{
}
}
使用时需要强制转换为 或 :IA
IB
var myAWithB = new MyAWithB();
// myAWithB.Bar() // will not compile
(myAWithB as IA).Bar(); // prints B implemented in A
(myAWithB as IB).Bar(); // prints B implemented in A
附言
就我个人而言,我不是这个功能的忠实粉丝,尽量不要在我的代码库中引入它,但可以说它可以有一些用途。
此外,还有一些有趣的讨论可以遵循@github与该主题有些相关的讨论:
评论
B
的实现”——你这是什么意思?interface A : B {}
A
B
interface A { B ExposedB { get; } }
A
B
B
A