C#缺乏静态继承 - 我该怎么办?

yel*_*ood 7 c# oop inheritance

好吧,你可能知道,在C#中不可能进行静态继承.我明白,但是我坚持我的程序开发.

我会尽量让它变得简单.让我们说我们的代码需要管理在某些机场展示飞机的物体.要求如下:

  • 所有飞机都有共享的成员和方法

  • 有许多类型的飞机,每种类型可能有自己的额外方法和成员.每种飞机类型可以有许多实例.

  • 每种飞机类型必须具有此类型的友好名称,以及有关此类型的更多详细信息.例如,名为F16的类将具有静态成员FriendlyName,其值为"Lockheed Martin F-16 Fighting Falcon".

  • 其他程序员应该能够添加更多的飞机,但必须强制执行以创建有关飞机类型的相同静态细节.

  • 在某些GUI中,应该有一种方法让用户看到可用类型列表(带有诸如FriendlyName之类的详细信息),并添加或删除飞机实例,保存,比方说,给某些XML文件.

所以,基本上,如果我可以强制继承类来实现静态成员和方法,我会强制使用类型的静态成员,例如FriendlyName.可悲的是,我做不到.

那么,这个场景的最佳设计是什么?

Aar*_*ght 8

一个答案是用属性(元数据)装饰每个类:

[Description("Lockheed Martin F-16 Fighting Falcon")]
public class F16 : Aircraft
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这是使用DescriptionAttribute已经在System.ComponentModel.

你可以得到这样的元数据:

Type t = typeof(F16);
DescriptionAttribute attr = (DescriptionAttribute)Attribute.GetCustomAttribute(t,
    typeof(DescriptionAttribute));
string description = (attr != null) ? attr.Description : t.Name;
Run Code Online (Sandbox Code Playgroud)

这将从您对F16类的引用中获取描述文本.