2012-12-23 256 views
4

“Rectangle”类不公开所有我需要操作矩形的函数。例如,我经常只想更改“.Bottom”值。 现有的功能都不允许我这样做,并且我发现自己正在创建一个新的矩形来完成我所需要的功能。VB.NET:向类添加其他功能

这给我带来了一个普遍的问题: 是否有可能在框架中的类中添加额外的函数,然后在我的整个项目中可用?

+0

是。你可以使用扩展方法来做到这一点。 –

+1

只是要挑剔,但Bottom是一个计算的值,加上Y和Height属性*(这就是只读的原因)*,您打算如何更改矩形的底部,修改Y或高度长方形? – Steve

+0

我明白你的观点,并且我同意你的看法,因为它的一部分是如何设计的。但是,能够改变X和Y的用途又是什么?或者有一个.Inflate方法,但没有超载,只允许我在一边膨胀它,而不是缩小/扩大它,让X和Y随着它变化。对我来说,它看起来像是“是的,让我们将最常见的功能/方法添加到矩形”,而在回家的路上,他们发现他们必须在某处绘制线条。对我而言,他们抽得太早了。 – tmighty

回答

6

你可以

  1. 通过extension methods
  2. 扩展类(如Rectangle)创建包含一个Rectangle例如自定义类(有一个矩形),并添加附加属性和方法

请注意,您不能继承Rectangle以扩展其功能,因为它不是Class而是Structure

这里有一个简单的扩展:

Module RectangleExtensions 

    <System.Runtime.CompilerServices.Extension()> _ 
    Public Sub Move(rectangle As Rectangle, x As Int32, y As Int32) 
     rectangle.Location = New Point(x, y) 
    End Sub 

End Module 

它,就好像它在Rectangle

Dim rec = New Rectangle(New Point(100, 100), New Size(50, 50)) 
rec.move(100, 200) 
0

可以使用Extension Methods是现有的方法中,你可以使用。但是有一个缺点:你不能以这种方式使用任何私人或受保护的成员。

在另一方面,你可以尝试创建自己的类,并从一个继承,但有两个可能的缺点:

  • 你仍然无法使用从继承类的任何私有成员(但可以使用受保护的)
  • 没有从框架每一个类可以继承 - 他们中的一些被标记密封,它们不能被继承