gpt4 book ai didi

c# - 非虚拟接口(interface) (NVI) 惯用法在 C# 中是否与在 C++ 中一样有用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:51 26 4
gpt4 key购买 nike

在 C++ 中,我经常需要 NVI使我的 API 保持一致。不过,我认为它在 C# 中的使用并不多。我想知道这是否是因为 C# 作为一种语言提供了不需要 NVI 的功能? (不过,在需要的地方,我仍然在 C# 中使用 NVI。)

最佳答案

C# 通过取消多重继承给 NVI 带来了问题。虽然我确实认为多重继承弊大于利,但(在大多数情况下)对于 NVI 来说是必要的。想到的最简单的事情是:C# 中的一个类不能实现多个 NVI。一旦发现 C#/NVI 串联的这一令人不快的方面,放弃 NVI 就会比放弃 C# 容易得多。

顺便说一下方面。这是一个非常有趣的概念,它的目标与 NVI 的目标完全相同,只是它试图查看问题的“真正本质”并“适本地”解决它,可以这么说。 Take a look .

就 .NET Framework 而言,有一种机制可以做到这一点:可以说,将“正交”代码注入(inject)手头的主要逻辑。我说的是 MarshalByRef/TransparentProxy 业务,我相信您已经听说过。不过,它确实会严重影响性能,所以运气不好。

还有许多尝试通过其他技术实现相同的概念,从构建外观到上面提到的肮脏业务再到 MSIL 的后处理。

后一种方法恰好最吸引您,因为它可以变得透明(通过将需要的步骤合并到一个人的构建例程中),它不会影响性能(比实际执行“正交”绝对必要的更多"代码)并且它不涉及某种“黑客攻击”或逆向工程,因为 MSIL 是开放的并且有据可查。

Here人们可以找到更详细讨论的这些要点,以及更多信息和实际工具的链接。出于同样的目的使用谷歌也是可以接受的。 :-)

祝你好运。

关于c# - 非虚拟接口(interface) (NVI) 惯用法在 C# 中是否与在 C++ 中一样有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340487/

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