C# 如何在.NET中修改方法的内容
我想知道是否有一种方法可以“隐藏”函数,下面的类在我当前项目的程序集引用中,我不能以任何方式修改程序集的内容C# 如何在.NET中修改方法的内容,c#,.net,vb.net,reflection,shadows,C#,.net,Vb.net,Reflection,Shadows,我想知道是否有一种方法可以“隐藏”函数,下面的类在我当前项目的程序集引用中,我不能以任何方式修改程序集的内容 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
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语言都可以。
希望这是清楚的,谢谢
Public Class MyCoorSpace
inherits CoordinateSpace
Public Overrides Function ToPixelsY(ByVal y As Single) As Single
Return MyBase.FromPixelsY(y)
End Function
End Class
那是遗产
现在,case类中的装饰是密封的(notheritable
在VB.NET中)
那是遗产
现在,case类中的装饰是密封的(notheritable
在VB.NET中)
从类型继承并重写属性。
ToPixelsY
已返回值。你的意思是想摆脱ToPixelsY
的三行实现,并用Return Me.FromPixelsY(y)
替换它吗?是的@ChrisSinclair,这正是我想要达到的目标。汇编中的许多类调用这个ToPixelsY
函数,但返回类型不是我所期望的,相反,FromPixelsY
返回类型是我所寻找的。如果你不能更改汇编的源代码,除了IL编织,我想你不能。最好的办法是用自己的实现facade包装CoordinateSpace
(以及使用它的相关类)。从外观上看,我猜这个类的设计没有考虑到可扩展性(也就是说,这些方法是不可重写的),因此我不确定如何重新设计应用程序的用法来解决这个问题。@ChrisSinclair-如果这个类不是密封的(notheritable
在VB.NET中),然后您可以从CoordinateSpace
派生一个新类,然后重写该方法(Overrides
在VB.NET中,new
在C#)并让它调用基类的方法。从类型继承并重写属性。ToPixelsY
已经返回了一个值。你的意思是想摆脱ToPixelsY
的三行实现,并用Return Me.FromPixelsY(y)
替换它吗?是的@ChrisSinclair,这正是我想要达到的目标。汇编中的许多类调用这个ToPixelsY
函数,但返回类型不是我所期望的,相反,FromPixelsY
返回类型是我所寻找的。如果你不能更改汇编的源代码,除了IL编织,我想你不能。最好的办法是用自己的实现facade包装CoordinateSpace
(以及使用它的相关类)。从外观上看,我猜这个类的设计没有考虑到可扩展性(也就是说,这些方法是不可重写的),因此我不确定如何重新设计应用程序的用法来解决这个问题。@ChrisSinclair-如果这个类不是密封的(notheritable
在VB.NET中),然后您可以从CoordinateSpace
派生一个新类,然后重写方法(Overrides
在VB.NET中,new
在C#)并让它调用基类的方法。好的,这是一个很好的方法,但是,我需要保证当程序集中的任何类调用基类CoordinateSpace
时,调用mycordspace
函数ToPixelsY
;你认为可能吗?当然不可能。您无法控制在引用的程序集中调用的内容。但您可以控制从程序集中调用的内容。您需要抽象调用的实现。您的客户机必须通过base或interface调用对象,并且您必须提供希望他们调用的对象。因此,他们不会调用objectCoordinateSpace
而是调用你给他们的object,但是地下工作将由CoordinateSpace
完成,这是一个很好的方法,但是,我需要保证当程序集中的任何类调用基类CoordinateSpace
时,调用mycordspace
函数ToPixelsY
;你认为可能吗?当然不可能。您无法控制在引用的程序集中调用的内容。但您可以控制从程序集中调用的内容。您需要抽象调用的实现。您的客户机必须通过base或interface调用对象,并且您必须提供希望他们调用的对象。因此,他们不会调用objectCoordinateSpace
而是调用您提供给他们的object,但地下工作将由CoordinateSpace
Public Class MyCoordSpace // here of course would be nice to implement same interface as CoordinateSpace, if any
private _cs as new CoordinateSpace()
Public Function ToPixelsY(ByVal y As Single) As Single
Return _cs.FromPixelsY(y)
End Function
End Class