是否有一个核心C#矩形类';它不应该是只读的';T
是否有一个核心C#矩形类';它不应该是只读的';T,c#,C#,点具有X和Y,可以更改它们。但是矩形具有左侧,顶部,右侧,底部只读。为了让事情变得更有趣,宽度和高度是可写的。因此,要移动一个矩形,您需要偏移并更改宽度和高度,此时您可以相应地更改TLRB值 是否有我缺少的真正的矩形类可以写入这些值,这样我就不必在更新内部值时发挥创造性了?像RECT? PS:当前使用的是Rectangle.FromLTRB,但我键入的内容比我应该键入的要多,只需更改Top值。编辑:似乎您是对的,并且提供了更好的解决方案,在不同的情况下,您可以编写自己的Rectangle类: c
点
具有X
和Y
,可以更改它们。但是矩形
具有左侧
,顶部
,右侧
,底部
只读。为了让事情变得更有趣,宽度
和高度
是可写的。因此,要移动一个矩形
,您需要偏移
并更改宽度
和高度
,此时您可以相应地更改TLRB
值
是否有我缺少的真正的矩形
类可以写入这些值,这样我就不必在更新内部值时发挥创造性了?像RECT
?
PS:当前使用的是
Rectangle.FromLTRB
,但我键入的内容比我应该键入的要多,只需更改Top
值。编辑:似乎您是对的,并且提供了更好的解决方案,在不同的情况下,您可以编写自己的Rectangle类:
class Point
{
public double X;
public double Y;
}
class Rectangle
{
public Point TopLeft;
public double Width;
public double Height;
}
然后,如果需要,可以创建返回点的方法。如果您想修改其行为,还可以将该类作为原始类的包装器。您可以执行以下操作:
Rectangle initialRect;
....some other code
initialRect = new Rectangle(new Point(0,0), 100, 100);
或
或
具有这些可设置的公共属性X
,Y
,宽度
,高度
不可设置的属性有Top
、Bottom
、Left、
和Right
。尽管这些都是通过可设置属性间接设置的。如果查看上面链接的矩形
MSDN文章,您可以看到如何计算不可设置的属性
只是Top
李>Y
正好是底部
-Y
高度
只是左侧
李>X
只是x组件Right
+x
宽度
我认为,您可以在已经定义的
Rectangle
类中通过设置可设置的属性以及计算其他不可设置属性的方式来完成所有需要的操作 如果您谈论的是System.Drawing.Rectangle结构,它具有可写的X和Y属性,就像Point一样。是的,您缺少了一些东西。
Top是只读的,但它是只读的
public int Top
{
get
{
return this.Y;
}
}
Y是可写的。所以,如果你想改变顶部,只需改变Y
public int Left
{
get
{
return this.X;
}
}
X是可写的。宽度和高度也是可写的。如果您坚持使用Top==Y/Left==X+宽度+高度,则可以毫无问题地更改现有矩形(我猜是System.Drawing矩形) 只需创建一个新实例并将其分配给旧实例-点和矩形都是结构,所以应该是不可变包装方法或扩展方法?@BrokenGlass
Point
具有X
和Y
可写<代码>矩形具有等效的只读成员。什么是不可变的?我知道,这就是为什么我问核心是否有任何东西。仅仅因为有人做出了设计决定,就不得不写一个可写的矩形
。。。这不是一个很好的选择。现在只使用C#7天(C++已经15年了),我想知道我是否遗漏了什么……你可以尝试刮下矩形,并将其用于自己的实现。你说的是System.Windows.Shapes.Rectangle
还是另一个矩形类?@BlueTrin似乎是的!我知道我错过了什么。我已经习惯了TLRB
来自RECT
的TLRB
,以至于我甚至没有注意到其他人。谢谢附言:最好的藏身之地是在看得见的地方。。。绝对地啊,所以Top&Y等毕竟是有区别的。。我一直在想,但从来没有费心去查它。X
和Y
类似于左
和顶
,但宽
和高
与右
和底
不类似,后者是计算值。应该可以直接将设置为Right
和Bottom
,并使宽度和高度自动收缩/扩展以响应,但实际上不行,因为.NET的矩形实现存在缺陷。因此,这个问题是正确的,并且仍然存在:有更好的选择吗?但是修改X和Y会移动矩形。我相信他想要的属性只是修改顶部、底部、左侧或右侧,同时保持其他属性不变。
public int Top
{
get
{
return this.Y;
}
}
public int Left
{
get
{
return this.X;
}
}