我想跟踪自定义表单中的 TopMost
属性更改,这些表单称为 (Form)
。我无法使用 override
,因为 TopMost
不是 abstract
或 virtual
,我无法使用 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/