【发布时间】:2023-03-22 09:01:01
【问题描述】:
我想知道是否有一种方法可以“隐藏”一个函数,以下类在我当前项目的程序集引用中,我无法以任何方式修改程序集的内容。
Public Class CoordinateSpace
Public Function FromPixelsY(ByVal y As Single) As Single
Return (Me.m_originY + ((y * Me.ZoomY) / (Me.m_dpiY / 100.0F)))
End Function
Public Function ToPixelsY(ByVal y As Single) As Single
Dim num2 As Single = ((y - Me.m_originY) / Me.ZoomY) * (Me.m_dpiY / 100.0F)
Me.CheckOverflow(num2)
Return num2
End Function
End Class
此外,在程序集中,我在许多类中有许多调用,如下所示:
Public Class Printer
public function testPx() as boolean
dim c as new CoordinateSpace
return c.ToPixelsY(18) > 500
end function
End Class
对于我的项目,当调用 ToPixelsY 时,我需要上述类返回 FromPixelsY 中的内容。
有没有办法做到这一点?如果我继承类并覆盖或隐藏这些方法,那么当 testPx 调用函数 ToPixelsY 时,它实际上会调用 CoordinateSpace 方法,而不是我的新类的方法。
这是在 VB.net 中,但任何用于解决方案的 .NET 语言都可以。 希望这很清楚,谢谢!
【问题讨论】:
-
从类型继承并覆盖属性。
-
ToPixelsY已经返回了一个值。你的意思是你想摆脱ToPixelsY的 3 行实现,本质上用Return Me.FromPixelsY(y)替换它? -
是的@ChrisSinclair,这正是我想要达到的。程序集中的许多类都调用此
ToPixelsY函数,但返回类型不是我所期望的,相反,FromPixelsY返回类型是我正在寻找的。span> -
如果你不能改变程序集的源代码,没有IL编织,我认为你不能。你最好的办法是用你自己的实现外观包装
CoordinateSpace(以及使用它的相关类)。从它的外观来看,我猜这个类的设计并没有考虑到可扩展性(也就是说,这些方法是不可覆盖的),所以我不确定如何重新设计你的应用程序使用的含义解决这个问题。 -
@ChrisSinclair - 如果该类未密封(VB.NET 中的
NotInheritable),那么您可以从CoordinateSpace派生一个新类,然后覆盖(VB.NET 中的Overrides,newin C#) 方法并让它调用基类的方法。
标签: c# .net vb.net reflection shadows