c# - 当需要重写和隐式类使用时如何处理基本非虚拟/非抽象属性?

标签 c# overriding virtual abstract

我想跟踪自定义表单中的 TopMost 属性更改,这些表单称为 (Form)。我无法使用 override,因为 TopMost 不是 abstractvirtual,我无法使用 new 关键字,因为它在隐式引用时不起作用。

处理此类任务的最佳方法是什么?只要基类 (Form) 既没有“change”事件,也没有要重写的 ONSomething 虚拟方法,并且我们的属性没有,我们就可以替换任何属性 TopMost标记为抽象虚拟

示例:

我有很多基于Form的类

MyForm1:Form, class MyForm2:Form, class MyForm_n:Form

某些“工厂”返回Form类型的实例

Form f = GetMyForm();

最后我做到了

f.TopMost = !f.TopMost;

问题是我不能真正使用 Form GetMyForm() 的任何其他返回类型。我不能使用 interface 或其他基类,除了实际的 Form 一个(事实上,没有工厂,我使用 .ParentForm 属性一些控制)。

完成任务并保持代码尽可能干净的最佳方法是什么?提前致谢。

最佳答案

听起来您可能想在具体类和 Form 之间引入一个新的抽象类。它可能有一个 ObservedTopMost 属性或类似的东西,它委托(delegate)给 TopMost 但也会引发一个事件。

需要注意的是,这在使用新属性时才有用;它不会神奇地发现其他地方对现有属性的更改。不过,它可能足以满足您的目的。

关于c# - 当需要重写和隐式类使用时如何处理基本非虚拟/非抽象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182019/

相关文章:

c# - USB 闪存驱动器模拟(如 cd/dvd rom 虚拟驱动器)-是否可能

c# - 从 C# 中的 REST 服务下载文件

java - 访问android中重写方法的参数的子方法?

c++ - 在非模板类中强制使用模板方法

c++ - 虚函数内的内联函数会发生什么?

c# - 我如何检查我的值是否与其他值匹配,例如配对游戏

c# - 日期时间序列化器省略毫秒?

javascript - console.log 如何将 javascript 日期对象转换为人类可读的格式

.net - 用扩展方法覆盖(或隐藏)一个方法?

C++重载虚拟+运算符