在C#中为类属性添加virtual修饰符是否会破坏旧版客户端DLL?
结论:这个修改不会破坏旧版客户端DLL
放心,给类的属性加上virtual关键字属于完全向后兼容的更改,旧客户端DLL可以正常工作,不会出现绑定错误或者运行时异常。原因主要有这几点:
- 属性在C#编译后本质是一对
get_XXX和set_XXX方法,你只是给这些方法加上了virtual修饰符,方法的签名(名称、参数列表、返回值类型)完全没有变化。旧客户端编译时是基于原来的方法签名生成调用逻辑的,更新后的类依然匹配这个签名,所以调用不会失败。 - CLR对虚方法的调用机制是动态绑定,但这只会影响那些重写了该虚方法的子类,对于旧客户端来说,它只是在调用基类的属性方法,不管方法是不是虚的,运行时都能正确找到对应的实现。
- 除非旧客户端有特殊的反射逻辑(比如检查方法是否带有
virtual标记),否则正常使用属性的场景下,这个修改不会产生任何负面影响。
内容的提问来源于stack exchange,提问作者Ricardo Alves
相关产品推荐
相关产品推荐

