簡體   English   中英

當Rectangle是屬性時調用Rectangle.Inflate()

[英]Calling Rectangle.Inflate() when Rectangle is a property

我有一個帶有Rectangle屬性的類,如下所示:

public class Test {
    public Rectangle Rect { set; get; }
}

在課堂之外,我試圖將Rect的高度降低20,但由於出現錯誤,因此出現錯誤,這是不允許的。

然后我使用了TestObj.Rect.Inflate(0,-20); ,我沒有錯誤,但是對我運行程序時Rect的高度沒有影響。

由於上述相同的原因,我可以理解,但它不起作用,但是為什么我沒有收到任何錯誤? 是否有一般規則?

那么降低Rect高度的最佳方法是什么?

Rectangle是一種值類型,因此將按值復制。 當在Rect屬性上調用Inflate ,您正在修改副本。 不是實際的矩形。

如果Rect是一個字段而不是一個屬性,那么它會起作用,因為訪問字段不需要復制值。

我的意思是以下將起作用

public class Test
{
    public Rectangle Rect;
}

鑒於Rect是一個屬性,您需要重新分配計算值以使其起作用。

引用可變值類型是邪惡的

Inflate的問題在於,它也影響Y坐標,假設您純粹只是想調整高度,然后就可以重新創建具有調整高度的Rectangle

new Rectangle(Test.Rect.Location, new Size(Test.Rect.Width, Test.Rect.Height - 20));

矩形是一個值類型。 Inflate方法返回Rectangle的新實例,但當前不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM