在C#中,您必须将方法标记为虚方法,以使其能够被覆盖。这是否意味着在C#中您应该将所有方法标记为虚拟方法(除了一些您不想被覆盖的方法之外),因为您很可能不知道可以用什么方式继承您的类?
否。如果语言设计人员认为virtual应该是默认值,那么 它将是默认值 。
可覆盖性是一种 功能 ,与所有功能一样,它也有 成本
。可重写方法的成本很高:设计,实现和测试成本很高,尤其是对类有“敏感性”时;虚拟方法是将未经测试的第三方代码引入系统的方式,并且具有安全性。
如果您不知道如何继承您的类, 请不要发布您的类, 因为 您尚未完成对它的设计。
您的扩展性模型绝对是您应该提前知道的;它会深刻影响您的设计和测试策略。
我主张所有类都是 密封的, 并且所有方法都是 非虚拟的, 直到您有一个以客户为中心的真实世界的理由来解封或将方法虚拟化。
基本上,您的问题是“我不知道我的客户打算如何消费我的课程;因此我应该使它可以任意扩展吗?” 没有; 你应该 变得博学多才
!您不会问:“我不知道我的客户将如何使用我的类,所以我应该将我的所有属性都读写吗?并且我应该使我的所有方法都可以读写委托类型的属性,以便我的用户可以用自己的实现替换任何方法吗?”
不,在您有 证据证明 用户确实需要该功能之前,请勿执行任何此类操作!花费宝贵的时间来设计,测试和实施用户真正想要和需要的功能,并从知识的角度去做。



