施工开始
介绍
构造函数是创建类和结构的构建块。一个类或结构可以有多个构造函数。这些构造函数允许开发人员设置默认值、限制实例化以及编写易于阅读/维护/扩展的应用程序/代码。
构造函数
如果您没有为类或结构提供任何构造函数,C# 将默认创建一个。这反过来会实例化对象并根据其数据类型将成员变量设置为默认值。在默认值表中,您将找到基于 C# 所用类型的默认值列表。不提供构造函数意味着 C# 将依赖隐式、无参数的构造函数根据上表自动将值类型的每个字段初始化为默认值。
构造函数是一种特殊的方法,其名称与其类型相同。更专业地说,方法签名仅由方法名称及其参数列表组成,不包括返回类型。这是一个例子:
public class ProgrammingLanguage
{
private string name;
private double version;
public ProgrammingLanguage(string languageName, double languageVersion)
{
name = languageName;
version = languageVersion;
}
}
实现构造函数有两种方法。一种是单行语句,如下例所示,另一种是上面更详细的示例。两种方法各有优缺点。让我们来探索一下单行语句,又称表达式主体定义。
public class Language
{
private string languageName;
public Language(string name) => Name = name;
public string Name
{
get => languageName;
set => languageName = value;
}
}
此表达式定义将参数分配给languageName。
静态构造函数
前面的示例是创建新对象的实例构造函数。类和结构也可以具有静态构造函数,用于初始化特定类型的静态成员。这些通常是无参数的。如果您不提供静态构造函数来初始化静态字段,则 C# 编译器会识别它,并根据默认值表将这些字段初始化为其默认值。让我们看一个例子。
静态构造函数用于初始化任何静态数据或仅执行一次操作/计算。它在创建第一个实例或引用任何静态成员之前自动调用。
public class Python : Language
{
private static double minimumVersion;
public Python(string creator, string languageType) : base(creator, languageType)
{ }
static Python()
{
minimumVersion = 3.8;
}
}
另一个例子使用表达式主体定义来实现相同的目的。
public class Ruby : Language
{
private static double minimumVersion;
public Ruby(string creator, string languageType) : base(creator, languageType)
{ }
static Ruby() => minimumVersion = 18;
}
典型用法:
- 当某个类使用某些文件来写入日志或数据时,请使用 Logger 类。
- 对非托管代码使用 Wrapper 类。
- 强制对无法通过编译时约束检查的参数进行运行时检查。
实例构造函数
当您使用new表达式初始化任何实例成员变量以创建类的对象时,将使用这些构造函数类型。为了初始化非静态类中的静态类或静态变量,定义静态构造函数非常重要。
下面是一个无参数实例构造函数的示例。
class VillageCoordinates
{
public double lat, lng;
// constructor
public VillageCoordinates()
{
lat = 0;
lng = 0;
}
}
如果您使用公共字段,则需要注意,这并不值得推荐。公共字段允许程序中任何地方的任何方法 -对给定对象的内部工作进行不受限制和未经验证的访问。这些成员通常应该是私有的,并且只能通过类属性和方法访问。
让我们添加另一个接受两个参数的构造函数。
public VillageCoordinates(double lat, double lng)
{
this.lat = lat;
this.lng = lng;
}
每当创建基于VillageCoordinates类的对象时,都会调用实例构造函数。随着应用程序的成熟,提供不同类型的构造函数通常很有用,以简化新对象的创建。
现在您可以创建具有默认或特定初始值的村庄。
VillageCoordinates Village1 = new VillageCoordinates();
VillageCoordinates Village2 = new VillageCoordinates(10.4,20.2);
当类没有构造函数时,根据成员的默认值使用无参数。
私有构造函数
这是一种特殊类型的实例构造函数。主要适用于类只有静态成员的情况。如果一个类有一个或多个私有构造函数,而没有公共构造函数,则其他类无法创建此类的实例;此类内部的嵌套类除外。
例如:
class Vehicle
{
private Vehicle() {}
public static int wheels = 4 ;
}
如果声明一个空构造函数,C# 编译器将不会动态生成无参数构造函数。如果构造函数未使用访问修饰符,则默认情况下它也将变为私有构造函数。使用private关键字可以明确说明类型,让开发人员一目了然。
私有构造函数的工作方式与Math类非常相似。当没有实例字段或方法时,或者当调用方法获取类的实例时,它会阻止创建实例。
结论
本指南向您介绍了 C# 为您提供的不同类型的构造函数的精妙细节。这些构造函数随着时间的推移逐渐出现在该语言中,以满足该语言扩展使用的新要求。通过了解这些不同构造函数的规则和要求,您将准备好应对新应用程序的任何挑战,并能够编写高效、结构良好且强大的代码。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~