在C#中,是否可以扩展没有构造函数的类?
也许我正在考虑这个错误,只是需要踢裆。我有一个扩展System.Windows.Media.Transform的Silverlight类,随着Silverlight 2的官方发布,Transform现在没有构造函数。所以,当我编译我的类时,我得到一个错误,说'类型'...转换'没有定义构造函数。'
是否仍然可以以有用的方式扩展此类?如果没有,我将会画出一大堆悲伤的面孔。
答案 0 :(得分:9)
Transform的唯一构造函数是内部的,所以你不能自己从它派生。
答案 1 :(得分:0)
隐藏所有公共构造函数是一种用于防止子类化并强制开发人员按预期使用该类的技术。可能是实现者希望您在扩展时使用适配器或Facade甚至是代理。
构造函数中可能存在重要的生命周期细节,需要将其用作原始实现者,或者可能是开发人员的疏忽。
我已经看到尝试转换为Factory模式,其中以防止子类化的方式完成。即没有受保护的构造函数可供子类使用。有时,高级对象模式会使语言的内置功能变得紧张。
答案 2 :(得分:0)
某些类没有构造函数是不可能的。每个班级至少有一个AFAIK。如果你不写它C#编译器将为你插入一个默认(无参数)构造函数。
答案 3 :(得分:0)
只要它没有密封,你就应该能够扩展它。