偏移矩形在类中显示为属性

时间:2018-02-03 04:45:53

标签: vb.net class

我尝试了以下内容:

我创建了一个类:

Public Class Class1

    Private _MyRect As Rectangle

    Public Property MyRect() As Rectangle
        Get
            Return _MyRect
        End Get
        Set(value As Rectangle)
            _MyRect = value
        End Set
    End Property

End Class

然后我以一种形式实例化类及其矩形:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        Dim c As New Class1
        Dim r As Rectangle = Rectangle.FromLTRB(10, 10, 50, 50)
        c.MyRect = r

        c.MyRect.Offset(100, 100)
        Debug.Print(c.MyRect.ToString)

    End Sub
End Class

调试字符串告诉我,抵消没有效果。

这里发生了什么,我将如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

问题是Rectangle是一个值类型,所以这一行:

c.MyRect.Offset(100, 100)

实际上是对Class1对象中包含的值的副本进行操作。如果您在分配到Offset之前在r上致电c.MyRect,那么它就能正常运行。如果您希望能够在初始分配后进行更改,则需要获取属性值,将其分配给变量,调用Offset,然后分配回属性:

Dim r1 = c.MyRect

r1.Offset(100, 100)
c.MyRect = r1

Debug.Print(c.MyRect.ToString)

请注意,如果Rectangle是一个类而不是一个结构,那么您现有的代码将按预期工作。这是吸引很多人的价值类型和参考类型之间的重要区别。