加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c#中实现多态,如何做到最好?

发布时间:2020-12-15 23:52:27 所属栏目:百科 来源:网络整理
导读:第一个问题在这里,所以希望你们都会轻轻地对我说话! 在过去的几天里,我一直在阅读关于多态的非常多的内容,并试图将它应用到我在c#中所做的事情,似乎有几种不同的方法来实现它.我希望我已经掌握了这个,但即使我没有澄清,我也很高兴. 从我所看到的,我有3个选
第一个问题在这里,所以希望你们都会轻轻地对我说话!

在过去的几天里,我一直在阅读关于多态的非常多的内容,并试图将它应用到我在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;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读