2012-12-23 254 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是現有的方法中,你可以使用。但是有一個缺點:你不能以這種方式使用任何私人或受保護的成員。

在另一方面,你可以嘗試創建自己的類,並從一個繼承,但有兩個可能的缺點:

  • 你仍然無法使用從繼承類的任何私有成員(但可以使用受保護的)
  • 沒有從框架每一個類可以繼承 - 他們中的一些被標記密封,它們不能被繼承