gpt4 book ai didi

c# - 提供继承的静态属性(概念上)

转载 作者:太空狗 更新时间:2023-10-29 23:42:45 24 4
gpt4 key购买 nike

我有一个 C# 基类,我要将信息与每个类型(而不是每个实例)相关联。本质上,我希望所有子类都呈现一个 Icon 和一个代表该类型的 FriendlyName。我希望必须创建一个类型实例来获取此信息,并且我想要求所有子类都提供此信息。理想情况下,它将位于基派生的接口(interface)中。

我尝试使用一个类属性,但它需要一个常量值,所以虽然我可以设置 FriendlyName,但我不能设置图标,而且我也看不出有什么方法可以使属性成为必需的,所以子类可以不用它(直到运行时)。

我在基础上添加了一个 child 可以隐藏的静态属性,但这有点丑陋,基础中的值真的很荒谬。它不知道给 child 起什么名字。我可以将基数放入属性中,但同样,直到运行时才会被捕获。

有人对我如何实现这样的事情有任何想法吗?有没有我缺少的模式?我们也鼓励任何开箱即用的想法。

编辑: 我真正需要的是沿着继承树要求类属性并能够使用嵌入式资源来设置这些属性的能力。将返回的所有信息实际上都是静态的,并且在编译时已知。我只是想不出一种很好地公开它的方法。

编辑 2:这是我需要的更具体的示例:

假设我有一个基类:

abstract class Vehicle { ... }

然后我有两个 child :

class Car : Vehicle { ... }

class Truck : Vehicle { ... }

我希望能够获得代表“汽车”或“卡车”的图标,而不必创建一个实例(la Car.Icon),因为给定类型的所有车辆都将具有相同的图标。

我还想确保所有 Vehicle 派生类型以相同的方式公开获取此图标,以防将来有人出现并添加新类

class Airplane : Vehicle  { ... }

编辑 3: 为什么我需要这个?好吧,我们有一个可以使用插件的应用程序。插件由类型定义,加载类型时,我们向用户显示图标和名称。当他们单击该图标时,它会创建该类型的实例(并为他们提供一个用于命名实例等的对话框)。我不需要也不想必须创建该类型的实例来获取图标。

最佳答案

如果你想绝对指示 child 实现这个,那么我看到的唯一方法是使基类抽象,并公开实例属性以返回图标和友好名称。

这些将是抽象的,而不是虚拟的,因此您强制由派生类实现。我知道它不干净,因为它是更好地存储在类型级别的信息,但这是我能看到的在编译时强制执行此要求的唯一方法。

关于c# - 提供继承的静态属性(概念上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/422246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com