gpt4 book ai didi

c# - 在 C# 中,为什么要调用 : this() constructor if no default was defined?

转载 作者:行者123 更新时间:2023-11-30 20:28:23 24 4
gpt4 key购买 nike

:this()C# documentation 的这个例子中有什么作用?

public struct Dog
{
public string Breed { get; set; }

public Dog(string breedName) : this()
{
Breed = breedName;
}
}

最佳答案

这基本上就是 C# 编译器在存在参数化构造函数时以不同方式处理引用类型和值类型的方式。

对于引用类型,如果程序员定义了参数化构造函数,那么编译器不会发出默认的无参数构造函数,但对于值类型,它仍然像您的情况一样。 struct 是一个值类型。

即使我删除了对默认构造函数的调用,下面的代码也能完美运行,因为编译器发出了 Program 类正在使用的默认无参数构造函数:

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var breed = new Dog();
}
}


public struct Dog
{
public string Breed { get; set; }

public Dog(string breedName) //: this()
{
Breed = breedName;
}
}
}

当你这样做时非常有效:

public Dog(string breedName) : this()
{
Breed = breedName;
}

在参数化构造函数启动之前,您实际上是在调用默认构造函数(我们不可见)。

在同一行上,引用类型的工作方式不同:

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var objMyClass = MyClass(); //gives error as compiler isn't emitting any default constructor
}
}

public class MyClass
{
public MyClass(int i)
{

}
}
}

关于c# - 在 C# 中,为什么要调用 : this() constructor if no default was defined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608934/

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