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