【发布时间】:2009-01-07 21:47:50
【问题描述】:
我有一个 C# 基类,我要在每个类型(而不是每个实例)的基础上关联信息。本质上,我希望所有子类都呈现一个 Icon 和一个代表该类型的 FriendlyName。我希望不必须创建一个类型实例来获取此信息,并且我想要求所有子类都提供此信息。理想情况下,它将位于基类派生的接口中。
我尝试使用类属性,但它需要一个常量值,所以虽然我可以设置 FriendlyName,但我无法设置图标,而且我看不到任何方法来使属性成为必需,所以没有它的子类可以侥幸逃脱(直到运行时)。
我在基础上添加了一个静态属性,孩子们可以隐藏,但这有点丑陋,基础的值真的很荒谬。它不知道给孩子取什么名字。我可以在 Property 中进行 base throw,但同样,直到运行时才会被捕获。
有人对我如何实现这样的事情有任何想法吗?有没有我错过的模式?也鼓励任何开箱即用的想法。
编辑:真正需要的是能够沿继承树要求类属性并能够使用嵌入式资源来设置这些属性。将返回的所有信息实际上都是静态的并且在编译时是已知的。我只是想不出一种很好地暴露它的方法。
编辑 2:这是我需要的更具体的示例:
假设我有一个基类:
abstract class Vehicle { ... }
然后我有两个孩子:
class Car : Vehicle { ... }
class Truck : Vehicle { ... }
我希望能够获得一个代表“汽车”或“卡车”的图标,而不必创建一个实例(例如 Car.Icon),因为给定类型的所有车辆都将具有相同的图标。
我还想确保所有车辆派生类型公开相同的方式来获取此图标,以防将来有人出现并添加新类
class Airplane : Vehicle { ... }
编辑 3: 为什么我需要这个?好吧,我们有一个可以使用插件的应用程序。插件由一个类型定义,当类型被加载时,我们向用户显示一个图标和名称。当他们单击该图标时,它会创建该类型的实例(并为他们提供一个用于命名实例的对话框等)。我不需要或不想必须创建该类型的实例来获取图标。
【问题讨论】:
标签: c# inheritance