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

2024-03-15

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


如果您想绝对指定子级实现此功能,那么我认为这样做的唯一方法是使基类抽象,并公开实例属性以返回图标和友好名称。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提供继承的静态属性(概念上) 的相关文章

随机推荐

  • 如何在SQLAlchemy中获取游标

    我是 Python Flask 的新手 在我的项目中 我们使用以下代码创建数据库对象 app Flask name app config SQLALCHEMY DATABASE URI sqlite tmp test db db SQLAl
  • 找不到 jQuery 选择器时会发生什么?

    如果我通过了一项selector as a parameter到一个函数 selector is an object function selector selector trigger eventHere 显然 event如果select
  • 从套接字读取二进制数据

    我正在尝试连接到服务器 然后向其发送 HTTP 请求 在本例中为 GET 这个想法是请求一个文件 然后从服务器接收它 它应该适用于文本文件和二进制文件 例如 imgs 我对文本文件没有问题 它工作得很好 但我对二进制文件有一些麻烦 首先 我
  • 枚举捕获 ALSA 设备并从中捕获

    我正在编写一个 C 程序 我想枚举系统中的所有捕获设备 实际上 我知道我有三个网络摄像头加上 集成 麦克风 识别它们并同时开始捕获它们 我使用 snd device name hint 枚举所有 PCM 设备 然后使用 snd device
  • Elasticsearch 按日期排序不正确

    在Elasticsearch文档中 有一个字段createdAt定义如下 createdAt type date format YYYY MM DD HH mm ss 当尝试按日期对记录进行排序时 我得到以下顺序 2019 10 01 07
  • 从迭代器返回对象的引用

    我想从向量返回对象的引用 并且该对象位于迭代器对象中 我怎样才能做到这一点 我尝试了以下方法 Customer CustomerDB getCustomerById const string id vector
  • 如何在 Node JS 中从目录中读取文件列表(按修改日期排序)

    需要从特定目录中读取文件列表 其中日期按降序或升序修改Node js 我已经尝试过下面的代码但无法得到解决方案 fs readdir path function err files if err throw err else var res
  • 如何通过php从外部网页获取内容?

    我想获取网页中的 标题 描述和关键字 我知道实现这项工作的 3 种方法 a 使用CURL b 使用 fopen c 使用 get meta data 奇怪的是 上述每一项都不能每次都正常工作 对于相同的网址 有时 我可以获得内容 有时 它会
  • 当焦点被移除时,XNA 运行缓慢

    我只是想知道 在制作游戏时 我注意到当我的游戏具有焦点时 就像它应该的那样 IsRunningSlowly 的 GameTime 值返回 false 但是当我更改应用程序时 它会更改为 true 我什至制作了一个空游戏 即使它失去焦点 Is
  • Android GPS 路由系统

    我正在开发一个 Android 应用程序 它可以定位用户 假设用户在路上 并且该应用程序将为用户创建最短路线 以便能够到达用户选择的目的地 定位用户不是问题 因为这里有一个 API http www vogella com articles
  • JavaEE真的可移植吗?

    我正在实施面试时分配给我的 JavaEE 作业 我以前对 EJB 有一些经验 但与 JMS 和 MDB 没有任何关系 以下是我通过大量示例发现的内容 应用程序服务器将其主题和队列绑定到不同的 JNDI 名称 例如topic queue jm
  • 查找并替换为唯一值

    我正在对换行符执行查找和替换 10 并使用以下代码将其替换为段落结束和段落开始标记
  • SOAP Web 服务和 RESTFUL Web 服务之间的区别

    我是 Java 新手 我知道有两种类型的 Web 服务 SOAP 网络服务 RESTful Web 服务 谁能告诉我两者之间的基本区别是什么 以及在哪种情况下SOAP Webservice是在什么情况下创建的RESTful Webservi
  • 如何修复未捕获的 DOMException:无法在“历史记录”上执行“pushState”

    我有这个小应用程序 可以在 webpack dev server 的开发模式下正常工作 但是当我使用生产模式生成的 dist 文件夹中的捆绑文件时 我在浏览器中得到的只是以下错误 Uncaught DOMException Failed t
  • 无法从标量中提取元素

    我有 2 张表公司和联系人 联系人具有地址 JSONB 列 我尝试使用 contact linked to company 上的连接并使用 jsonb array elements company addresses 进行 select 语
  • Vuejs 获取事件正在调用的元素?

    我有多个列表项 我想在单击它们时打开活动类 ul class list body li Pils li li Dubbel li li Tripel li li Quadrupel li li Wit li ul 我已经有一个setFilt
  • 如何使用 PHP 将文件 POST 到 REST 服务器而不将文件写入磁盘?

    我正在尝试将 XML 文件作为内部 API 的 POST 方法的一部分发送到服务器 所有 PHP 文档都指出使用 postVars file path to file xml 来实际发送文件 我想从字符串发送文件 但它仍然需要作为文件上传而
  • 在.NET Framework 2中播放PCM数据?

    我有一个从相机中提取的 u Law 压缩 PCM 数据流 我需要在扬声器上播放它吗 有人知道怎么做吗 我尝试过将 u Law 解码为普通的 WAV 数据 然后使用 SoundPlayer 但它似乎从来没有工作过 SoundPlayer 总是
  • 在函数参数中使用await

    是否可以使用带有参数的await 例如 const run async gt getStudentDetails await getStudentId 即使是这样 这似乎也不是最好的主意 以前有人这样做过吗 是的 您可以使用await每个任
  • 提供继承的静态属性(概念上)

    我有一个 C 基类 我要根据每个类型 而不是每个实例 将信息与其关联 本质上 我希望所有子类都呈现一个 Icon 和一个代表该类型的FriendlyName 我想not必须创建一个类型实例来获取此信息 并且我想要求所有子类提供此信息 理想情