c# - base() 和 this() 构造函数最佳实践

标签 c# oop inheritance constructor instantiation

在什么情况下,我应该在构造函数的括号之后(甚至在代码的其他地方)调用 :base():this() 构造函数).这些调用什么时候是好的做法,什么时候是强制性的?

最佳答案

: 基础(...)

如果您省略对基础构造函数的调用,它将自动调用默认的基础构造函数。

如果没有默认构造函数,则必须显式调用基类构造函数。

即使有默认构造函数,您仍可能希望调用与默认构造函数不同的构造函数。在这种情况下,您可能仍希望使用 base(foo, bar) 来调用与基本构造函数不同的构造函数。

当你想调用基类默认构造函数时,我不认为省略 base() 是一个坏习惯,尽管如果你喜欢显式,我认为包含没有坏处它。这是一个品味问题。

: 这个(...)

此语法允许您使用与同一类中的另一个不同的签名来调用一个构造函数。这样做从来都不是强制性的,但有时会有用。

它何时有用的一个例子是在构造函数中重用公共(public)代码。例如,在 C# 3.5 或之前的版本中,您可能希望在构造函数上模拟可选参数:

Foo(int x, int y)
{
     this.x = x;
     this.y = y;
}

Foo(int x) : this(x, 10) {}  // y defaults to 10

现在使用 C# 4.0 可选参数可用,这减少了对这种方法的需求。

在构造函数中重用代码的另一种方法是将其分解为静态函数,每个希望使用它的构造函数都会调用该函数。

关于c# - base() 和 this() 构造函数最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797528/

相关文章:

c# - 有人想转发它吗?

java - 无法关闭输出流

java - 覆盖子类中的成员数据,在父类(super class)实现中使用?

Java - 从接受泛型的类继承?

c# - 存储在 c# 列表中的嵌套结构或类

c# - 嵌套/子对象的自定义 XmlSerialization

c# - 未启用时更改按钮背景

PHP mySQL 从子类构造父数据

c++ - 什么是内部状态?

C++基类指针、集合类