强制所有派生类实现具有只读属性的特定属性

时间:2012-08-16 12:31:46

标签: c# windows

只是想了解什么是最好的方法,我会尝试解释我的问题,这似乎是一个更长的问题,对不起,

我有一个类Element,两个类Shape和Audio派生自它,另外两个类Text和Image派生自Shape,而另一个类Video派生自Image。我需要在每个类上实现一个type属性,这些类必须具有只读性质,因为除了实际类型之外,没有任何在这些类上设置类型的意义,例如:Image上的Type属性将始终返回值图像,没有别的。那么如何实现这种强制所有类实现Type属性的层次结构?这些类中的每一个都有自己的功能,而不是基本的Element类,可以标记为abstract,这将允许我将Type属性标记为abstract,这将强制它在派生类上实现,但只在一个级别实现,我该如何强制执行它也可以在视频上实现? 请建议我最好的方法。

先谢谢。

2 个答案:

答案 0 :(得分:1)

创建一个定义Type属性的接口,使所有需要强制实现Type的类从该接口继承。

答案 1 :(得分:1)

正如您所述,基类可以创建一个属性abstract,这将强制它由所有派生类实现。但是,如果您的第二层类(文本和图像)是具体的,则不能强制派生类(Video)实现方法(因为根据定义,具体类必须完全实现)。

您可以在Text / Image类中轻松地将属性标记为Virtual,以便可以被派生类覆盖,但这不会强制它。

也许您可以使用泛型和通用基类或接口做一些事情,但这取决于您对设计的更多了解。

您可能需要重新考虑如何设计对象层次结构(如果可能) - 也许视频不应来自Image。它真的是一种“是一种”关系吗?如果没有,也许您可​​以更改对象层次结构或使用接口而不是基类来实现所需的结果。