C#做什么:this()表示struct的构造函数之后

时间:2016-05-12 17:32:40

标签: c# struct

你能否回答一下,: this()在构造函数结构后的含义是什么?

    public struct BaseProject
    {
        public BaseProject(string project)
            : this()
        {
            this.Project = project;
        }

        public string Project { get; private set; }
    }

3 个答案:

答案 0 :(得分:3)

  

: this()在struct的构造函数后意味着什么?

C#中的this关键字是指该类的当前实例,也可用作扩展方法的第一个参数的修饰符。

因为它涉及structstruct的构造函数,它实际上没有意义,什么都不做。在 C#中,struct没有无参数构造函数。它们是very similarclass个构造函数,但在以下方面有所不同:

  • 结构不能包含显式无参数构造函数。 Struct成员会自动初始化为其默认值。
  • 结构体不能具有以下格式的初始化程序:base(argument-list)。

因此,结构构造函数之后的: this()不执行任何操作并且是多余的 - 它可以在没有任何问题的情况下被删除。但是,在struct构造函数的上下文中,this关键字works as expected

<强>类

在构造函数之后使用时,它首先在同一个类中调用另一个构造函数 - 在这种特定情况下是无参数构造函数。这可用于初始化对象实例的其他各个部分,因为它们首先被调用。

<强>构造

阅读&#34; using constructors&#34;在MSDN上获取更多详细信息。

<小时/> 请考虑以下事项:

public class FooBar
{
    public int Number { get; }
    public string Name { get; }

    public FooBar()
    {
        Number = 10;
        Name = "Pickles";
    }

    public FooBar(int number) : this()
    {
        Number = number;
    }

    public FooBar(int number, string name) : this(number)
    {
        Name = name;
    }
}

var fooBar1 = new FooBar();   
var fooBar2 = new FooBar(20);
var fooBar3 = new FooBar(77, "Stackoverflow");

// The following would be true
// fooBar1.Number == 10 and fooBar1.Name == "Pickles"
// fooBar2.Number == 20 and fooBar2.Name == "Pickles"
// fooBar3.Number == 77 and fooBar2.Name == "Stackoverflow"

<小时/> 也可以使用构造函数上下文中的this关键字(如上所示)来调用参数化构造函数。如果您要继承,则可以使用base关键字调用基类的默认或参数化构造函数。

答案 1 :(得分:0)

这意味着它正在调用该类型的parameterless constructor

答案 2 :(得分:0)

  

构造函数可以通过调用同一对象中的另一个构造函数   使用this关键字。

来自Using Constructors (C# Programming Guide)

因此,在您的示例中,当调用接受字符串的构造函数时,首先(隐式)调用无参数构造函数,然后调用构造函数的方法体,该函数接受正在执行的字符串。