我有一个C#基类,我将信息与每个类型(而不是每个实例)相关联.基本上我希望所有子类都显示一个Icon和一个表示该类型的FriendlyName.我想不是要创建一个类型的实例来获取此信息,我想要求所有子类提供该信息.理想情况下,它将位于基础派生的接口中.
我试图使用一个类属性,但它需要一个常量值,所以虽然我可以设置FriendlyName,但是我无法设置Icon,我无法找到一种方法来使所需的属性,所以子类可以没有它(直到运行时间).
我在子基础上添加了一个静态属性,孩子们可以隐藏,但这有点难看,基础的值真的是荒谬的.它无法知道孩子的名字是什么.我可以在属性中进行基础投掷,但同样,直到运行时才会被捕获.
任何人对我如何实现这样的事情都有任何想法?我缺少一种模式吗?任何开箱即用的想法都会受到鼓励.
编辑:我真的需要能够在继承树中要求类属性,并能够使用嵌入式资源来设置这些属性.将返回的所有信息都是静态的并且在编译时是已知的.我只是想不出一个很好地暴露它的方法.
编辑2:这是我需要的更具体的例子:
我们假设我有一个基类:
abstract class Vehicle { ... }
Run Code Online (Sandbox Code Playgroud)
然后我有两个孩子:
class Car : Vehicle { ... }
class Truck : Vehicle { ... }
Run Code Online (Sandbox Code Playgroud)
我希望能够得到一个代表"汽车"或"卡车"的图标,而不必创建一个实例(一个la Car.Icon),因为给定类型的所有车辆都将具有相同的图标.
我还想确保所有来自车辆的类型以相同的方式显示以获取此图标以防将来有人出现并添加新类
class Airplane : Vehicle { ... }
Run Code Online (Sandbox Code Playgroud)
编辑3:为什么我需要这个?好吧,我们有一个可以插入插件的应用程序.插件由类型定义,当加载类型时,我们向用户显示图标和名称.当他们单击该图标时,它会创建该类型的实例(并为他们提供一个用于命名实例的对话框等).我不需要或不想创建该类型的实例来获取图标.
如果您想绝对指定子级实现此功能,那么我认为这样做的唯一方法是使基类抽象,并公开实例属性以返回图标和友好名称。
这些将是抽象的,而不是虚拟的,因此您强制由派生类实现。我知道它并不干净,因为它是更好地存储在类型级别的信息,但这是我能看到的在编译时强制执行此要求的唯一方法。