gpt4 book ai didi

c# - 我应该将所有方法标记为虚拟吗?

转载 作者:IT老高 更新时间:2023-10-28 13:51:04 27 4
gpt4 key购买 nike

在 Java 中,您可以将方法标记为 final 以使其无法覆盖。

在 C# 中,您必须将方法标记为虚拟方法以使其可以覆盖。

这是否意味着在 C# 中您应该将所有方法标记为虚拟(除了一些您不想被覆盖的方法),因为您很可能不知道您的类可以通过何种方式被继承?

最佳答案

In C# you have to mark method as virtual to make it possible to override. Does it mean that in C# you should mark all methods virtual (except a few ones that you don't want to be overridden), since most likely you don't know in what way your class can be inherited?

没有。如果语言设计者认为 virtual 应该是默认设置,那么 它应该是默认设置

可覆盖性是一个特性,与所有特性一样,它也有成本。可覆盖方法的成本相当高:设计、实现和测试成本很高,特别是如果对类有任何“敏感性”;虚拟方法是将未经测试的第三方代码引入系统的方法,会产生安全影响。

如果你不知道你打算如何继承你的类,那么不要发布你的类,因为你还没有完成它的设计。你的可扩展性模型绝对是您应该提前知道的;它应该深刻地影响您的设计和测试策略。

我主张所有类密封,所有方法非虚拟,直到你有一个真正的客户为中心的理由来解封或使方法虚拟.

基本上你的问题是“我不知道我的客户打算如何消费我的类(class);因此我应该让它任意扩展吗?”不;你应该变得知识渊博!你不会问“我不知道我的客户将如何使用我的类,所以我应该让我的所有属性都可以读写吗?我应该让我的所有方法都可以读写委托(delegate)类型的属性,以便我的用户可以用自己的实现替换任何方法吗?”不,在您有证据用户确实需要该功能之前,不要做任何这些事情!花宝贵的时间设计、测试和实现用户真正想要和需要的功能,并从知识的角度来做。

关于c# - 我应该将所有方法标记为虚拟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451325/

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