「Rectangle」類不公開所有我需要操作矩形的函數。例如,我經常只想更改「.Bottom」值。 現有的功能都不允許我這樣做,並且我發現自己正在創建一個新的矩形來完成我所需要的功能。VB.NET:向類添加其他功能
這給我帶來了一個普遍的問題: 是否有可能在框架中的類中添加額外的函數,然後在我的整個項目中可用?
「Rectangle」類不公開所有我需要操作矩形的函數。例如,我經常只想更改「.Bottom」值。 現有的功能都不允許我這樣做,並且我發現自己正在創建一個新的矩形來完成我所需要的功能。VB.NET:向類添加其他功能
這給我帶來了一個普遍的問題: 是否有可能在框架中的類中添加額外的函數,然後在我的整個項目中可用?
你可以
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)
可以使用Extension Methods是現有的方法中,你可以使用。但是有一個缺點:你不能以這種方式使用任何私人或受保護的成員。
在另一方面,你可以嘗試創建自己的類,並從一個繼承,但有兩個可能的缺點:
是。你可以使用擴展方法來做到這一點。 –
只是要挑剔,但Bottom是一個計算的值,加上Y和Height屬性*(這就是隻讀的原因)*,您打算如何更改矩形的底部,修改Y或高度長方形? – Steve
我明白你的觀點,並且我同意你的看法,因爲它的一部分是如何設計的。但是,能夠改變X和Y的用途又是什麼?或者有一個.Inflate方法,但沒有超載,只允許我在一邊膨脹它,而不是縮小/擴大它,讓X和Y隨着它變化。對我來說,它看起來像是「是的,讓我們將最常見的功能/方法添加到矩形」,而在回家的路上,他們發現他們必須在某處繪製線條。對我而言,他們抽得太早了。 – tmighty