gpt4 book ai didi

c# - 难以理解重载类构造函数的语法

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:24 25 4
gpt4 key购买 nike

我在理解以下代码片段中的一行时遇到问题(摘自本书:MCSD 认证工具包(考试 70-483)C# 编程)...这里的问题集如下:

创建一个代表椭圆的 Ellipse 类。它应该将椭圆的大小和位置存储在 RectangleF 类型的 Location 属性中(在 System.Drawing 命名空间中定义)。给它两个构造函数:一个以 RectangleF 作为参数,一个以 X 位置、Y 位置、宽度、和高度作为参数。使第二个构造函数调用第一个构造函数,并在宽度或高度小于或等于 0 时使构造函数抛出异常。

class Ellipse
{
public RectangleF Location { get; set; }

// Constructor that takes a RectangleF as a parameter.
public Ellipse(RectangleF rect)
{
// Validate width and height.
if (rect.Width <= 0)
throw new ArgumentOutOfRangeException("width", "Ellipse width must be greater than 0.");

if (rect.Height <= 0)
throw new ArgumentOutOfRangeException("height", "Ellipse height must be greater than 0.");

// Save the location.
Location = rect;
}

// Constructor that takes x, y, width, and height as parameters.
public Ellipse(float x, float y, float width, float height)
: this(new RectangleF(x, y, width, height))
{
}
}

我在理解以下行时遇到问题...任何人都可以解释以下行的作用吗?请详细说明您的解释!

:this(new RectangleF(x, y, width, height))

提前致谢!

最佳答案

它的作用

有问题的行使用提供给构造函数的参数创建了 RectangleF 的新实例。然后它使用第一个构造函数使用创建的 RectanlgeF 初始化 Ellipse 的实例。

为什么这有用

Ellipse 的初始化有很多逻辑。人们可以用在第一个构造函数中完成的相同方式初始化它,但这将意味着逻辑重复 - 随之而来的所有坏处。通过这种方式,您可以在一个地方负责初始化一个新的 Ellipse,但您可以通过多种方式创建这样的实例。

考虑在一个可用的 RectangleF 的地方创建一个 Ellipse 的新实例,并且只实现了 Ellipse 的第一个构造函数.您必须通过调用来“解构”矩形

var ellipse = new Ellipse(myrect.X, myrect.Y, myrect.Width, myrect.Height);

有了额外的解释器,这就更方便了。

创建不同版本的构造函数(或方法)通常被称为“语法糖”,因为它可以使编码人员的生活变得甜美。

希望这对您有所帮助。

关于c# - 难以理解重载类构造函数的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40691575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com