- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在理解以下代码片段中的一行时遇到问题(摘自本书: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/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!