在过去的几天里,我一直在阅读关于多态的非常多的内容,并试图将它应用到我在c#中所做的事情,似乎有几种不同的方法来实现它.我希望我已经掌握了这个,但即使我没有澄清,我也很高兴.
从我所看到的,我有3个选择:
>我可以从基地继承
class并使用关键字
对我的任何方法都“虚拟”
想要我的派生类
覆盖.
>我可以用虚方法实现一个抽象类
这样做,
>我可以使用界面?
从我所看到的,如果我不需要基础中的任何实现逻辑,那么一个接口给了我最大的灵活性(因为我当然不限制我自己的多重继承等),但如果我需要基础为了能够在派生类正在做的事情之上做一些事情,那么使用1或2将是更好的解决方案?
感谢有关这些人的任何意见 – 本周末我已经阅读了这么多内容,无论是在本网站还是其他地方,我认为我现在理解这些方法,但我只是想以语言特定的方式澄清如果我在右边跟踪.希望我也正确地标记了这一点.
干杯,
特里
对于真正的多态性,虚拟是必须的;多态性最常与类型子类化相关联……
你当然可以混合两者:
public interface IFoo { voID bar();}class Foo : IFoo { public virtual voID bar() {...}}class Foo2 : Foo { public overrIDe ...}
摘要是一个单独的问题;抽象的选择实际上是:它可以由基类理智地定义吗?如果没有默认实现,则它必须是抽象的.
当存在许多常见的实现细节时,常见的基类可能很有用,并且纯粹通过接口复制是没有意义的;但有趣的是 – 如果实现永远不会因每个实现而有所不同,那么扩展方法提供了一种在接口上公开它的有用方法(这样每个实现都不必这样做):
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#中实现多态,如何做到最好?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)