4

「Rectangle」クラスは、長方形を操作するために必要なすべての関数を公開しているわけではありません。たとえば、「.Bottom」の値だけを変更したいことがよくあります。既存の関数ではこれを行うことができず、必要なことを行うために新しい四角形を作成していることに気づきました。

これにより、一般的な質問が生じます。フレームワーク内のクラスに関数を追加して、プロジェクト全体で使用できるようにすることは可能ですか?

4

2 に答える 2

7

あなたは出来る

  1. 拡張メソッドRectangleを介してクラスを拡張します (のように)
  2. インスタンスを保持する (長方形を持つ) カスタム クラスを作成し、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)
于 2012-12-23T18:58:10.090 に答える
0

拡張メソッドを使用できます。ただし、欠点が 1 つあります。この方法では、クラスのプライベート メンバーまたは保護されたメンバーを使用することはできません。

一方で、独自のクラスを作成してそのクラスを継承することもできますが、考えられる欠点が 2 つあります。

  • その継承されたクラスのプライベート メンバーはまだ使用できません (ただし、保護されたクラスは使用できます)。
  • フレームワークのすべてのクラスを継承できるわけではありません - それらのいくつかは封印されており、継承することはできません
于 2012-12-23T19:11:16.317 に答える