gpt4 book ai didi

c# - 在 C# 中实现多态性,如何最好地做到这一点?

转载 作者:行者123 更新时间:2023-11-30 13:29:27 25 4
gpt4 key购买 nike

这里是第一个问题,所以希望你们都对我温和一点!

在过去的几天里,我阅读了大量有关多态性的书籍,并尝试将其应用到我在 C# 中所做的工作中,似乎有几种不同的方法来实现它。我希望我已经掌握了这件事,但即使我没有得到澄清,我也会很高兴。

据我所知,我有 3 个选择:

  1. 我可以继承一个基础类并使用关键字'virtual' 在我使用的任何方法上希望我的派生类覆盖。
  2. 我可以用虚拟方法实现一个抽象类并这样做,
  3. 我可以使用界面吗?

据我所知,如果我不需要在基础中有任何实现逻辑,那么接口(interface)会给我最大的灵 active (因为我不会在多重继承等方面限制自己),但如果我要求基类能够在派生类所做的任何事情之上做一些事情,那么使用 1 或 2 将是更好的解决方案?

感谢您对这些人的任何意见 - 这个周末我在本网站和其他地方阅读了很多内容,我认为我现在理解了这些方法,但我只是想澄清一下如果我在正确的轨道上,则使用特定于语言的方式。希望我也正确标记了它。

干杯,特里

最佳答案

接口(interface)提供了最多的抽象;您不依赖于任何特定的实现(如果由于其他原因,实现必须具有不同的基类,则很有用)。

真正的多态,virtual是必须的;多态性最常与类型子类化相关...

您当然可以将两者混合使用:

public interface IFoo {
void Bar();
}
class Foo : IFoo {
public virtual void Bar() {...}
}
class Foo2 : Foo {
public override ...
}

abstract 是另外一回事; abstract 的选择实际上是:它可以由基类明智地定义吗?如果没有默认实现,它必须是抽象

当有很多共同的实现细节时,一个共同的基类会很有用,纯粹通过接口(interface)复制是没有意义的;但有趣的是 - 如果实现从不因实现而异,扩展方法提供了一种在接口(interface)上公开它的有用方法(这样每个实现都不必这样做):

public interface IFoo {
void Bar();
}
public static class FooExtensions {
// just a silly example...
public static bool TryBar(this IFoo foo) {
try {
foo.Bar();
return true;
} catch {
return false;
}
}
}

关于c# - 在 C# 中实现多态性,如何最好地做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com