C# SetBounds和SetBoundsCore之间有什么区别

C# SetBounds和SetBoundsCore之间有什么区别,c#,winforms,C#,Winforms,在WinForms中,您可以使用SetBounds设置控件的边界,或者如果您创建了用户控件,则可以覆盖SetBoundsCore。我想知道,它们是做相同的事还是有什么不同?我假设用户调用SetBounds,然后转发到SetBoundsCore来实现实际行为SetBoundsCore不应由您的代码调用。首先,SetBounds不是虚拟的,因此如果您需要在设置边界时运行一些额外的代码,您唯一的选择就是覆盖SetBoundsCore SetBounds执行一些参数验证,并包含有关调用SetBounds

在WinForms中,您可以使用
SetBounds
设置控件的边界,或者如果您创建了用户控件,则可以覆盖
SetBoundsCore
。我想知道,它们是做相同的事还是有什么不同?

我假设用户调用
SetBounds
,然后转发到
SetBoundsCore
来实现实际行为
SetBoundsCore
不应由您的代码调用。

首先,
SetBounds
不是虚拟的,因此如果您需要在设置边界时运行一些额外的代码,您唯一的选择就是覆盖
SetBoundsCore

SetBounds
执行一些参数验证,并包含有关调用
SetBoundsCore
的逻辑,该逻辑的大小基于
指定的边界
参数。它还确保不调用
SetBoundsCore
,除非大小实际发生变化

换句话说,
SetBoundsCore
是实现的核心,而
SetBounds
是包含验证和一些其他内务逻辑的公共入口点。

是一种更改控件位置和大小的
public
方法。它在引擎盖下调用
受保护的虚拟
方法

这意味着,如果覆盖
SetBoundsCore()
,则可以更改其算法(例如,添加位置和大小限制),并且这些更改将适用于除您自己调用
SetBounds()
以外的某些代码