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调用对象,并且您必须提供希望他们调用的对象。因此,他们不会调用object
CoordinateSpace
而是调用你给他们的object,但是地下工作将由
CoordinateSpace
完成,这是一个很好的方法,但是,我需要保证当程序集中的任何类调用基类
CoordinateSpace
时,调用
mycordspace
函数
ToPixelsY
;你认为可能吗?当然不可能。您无法控制在引用的程序集中调用的内容。但您可以控制从程序集中调用的内容。您需要抽象调用的实现。您的客户机必须通过base或interface调用对象,并且您必须提供希望他们调用的对象。因此,他们不会调用object
CoordinateSpace
而是调用您提供给他们的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