「Rectangle」クラスは、長方形を操作するために必要なすべての関数を公開しているわけではありません。たとえば、「.Bottom」の値だけを変更したいことがよくあります。既存の関数ではこれを行うことができず、必要なことを行うために新しい四角形を作成していることに気づきました。
これにより、一般的な質問が生じます。フレームワーク内のクラスに関数を追加して、プロジェクト全体で使用できるようにすることは可能ですか?
「Rectangle」クラスは、長方形を操作するために必要なすべての関数を公開しているわけではありません。たとえば、「.Bottom」の値だけを変更したいことがよくあります。既存の関数ではこれを行うことができず、必要なことを行うために新しい四角形を作成していることに気づきました。
これにより、一般的な質問が生じます。フレームワーク内のクラスに関数を追加して、プロジェクト全体で使用できるようにすることは可能ですか?
あなたは出来る
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)
拡張メソッドを使用できます。ただし、欠点が 1 つあります。この方法では、クラスのプライベート メンバーまたは保護されたメンバーを使用することはできません。
一方で、独自のクラスを作成してそのクラスを継承することもできますが、考えられる欠点が 2 つあります。