gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:06 25 4
gpt4 key购买 nike

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

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

例子:

我有很多基于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 但也会引发一个事件。

请务必注意,这在使用新属性时有用;它不会神奇地发现来自其他地方的现有属性(property)的变化。不过,它可能足以满足您的目的。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com