yel*_*ood 7 c# oop inheritance
好吧,你可能知道,在C#中不可能进行静态继承.我明白,但是我坚持我的程序开发.
我会尽量让它变得简单.让我们说我们的代码需要管理在某些机场展示飞机的物体.要求如下:
所有飞机都有共享的成员和方法
有许多类型的飞机,每种类型可能有自己的额外方法和成员.每种飞机类型可以有许多实例.
每种飞机类型必须具有此类型的友好名称,以及有关此类型的更多详细信息.例如,名为F16的类将具有静态成员FriendlyName,其值为"Lockheed Martin F-16 Fighting Falcon".
其他程序员应该能够添加更多的飞机,但必须强制执行以创建有关飞机类型的相同静态细节.
在某些GUI中,应该有一种方法让用户看到可用类型列表(带有诸如FriendlyName之类的详细信息),并添加或删除飞机实例,保存,比方说,给某些XML文件.
所以,基本上,如果我可以强制继承类来实现静态成员和方法,我会强制使用类型的静态成员,例如FriendlyName.可悲的是,我做不到.
那么,这个场景的最佳设计是什么?
一个答案是用属性(元数据)装饰每个类:
[Description("Lockheed Martin F-16 Fighting Falcon")]
public class F16 : Aircraft
{
    // ...
}
这是使用DescriptionAttribute已经在System.ComponentModel.
你可以得到这样的元数据:
Type t = typeof(F16);
DescriptionAttribute attr = (DescriptionAttribute)Attribute.GetCustomAttribute(t,
    typeof(DescriptionAttribute));
string description = (attr != null) ? attr.Description : t.Name;
这将从您对F16类的引用中获取描述文本.