C# 这个C代码是做什么的?

C# 这个C代码是做什么的?,c#,null,C#,Null,我从使用MVC3项目自动创建的AccountModels.cs类中获取了这段代码 你能解释一下“this(null)”位在做什么吗?它调用类中的另一个构造函数,并将null作为参数传递 您还可以编写:base(…)来显式调用基类中的构造函数。它调用类中的另一个构造函数,并将null作为参数传递 您还可以编写:base(…)来显式调用基类中的构造函数。它将调用AccountMembershipService的单参数构造函数,在处理您列出的构造函数体之前,将null作为参数传递 发件人: 构造函数可

我从使用MVC3项目自动创建的AccountModels.cs类中获取了这段代码


你能解释一下“this(null)”位在做什么吗?

它调用类中的另一个构造函数,并将
null
作为参数传递


您还可以编写
:base(…)
来显式调用基类中的构造函数。

它调用类中的另一个构造函数,并将
null
作为参数传递


您还可以编写
:base(…)
来显式调用基类中的构造函数。

它将调用
AccountMembershipService
的单参数构造函数,在处理您列出的构造函数体之前,将
null
作为参数传递

发件人:

构造函数可以使用this关键字调用同一对象中的另一个构造函数。与base一样,它可以与参数一起使用,也可以不与参数一起使用,构造函数中的任何参数都可以作为该函数的参数使用,或者作为表达式的一部分使用


更多详细信息,请参见的第17.10.1节(构造函数初始值设定项)。

它将调用
AccountMembershipService
的单参数构造函数,在处理列出的构造函数主体之前,将
null
作为参数传递

发件人:

构造函数可以使用this关键字调用同一对象中的另一个构造函数。与base一样,它可以与参数一起使用,也可以不与参数一起使用,构造函数中的任何参数都可以作为该函数的参数使用,或者作为表达式的一部分使用


更多详细信息,请参见的第17.10.1节(构造函数初始值设定项)。

它使用
null
参数调用不同的构造函数。

它使用
null
参数调用不同的构造函数。

在您的类中很可能还有另一个类似的构造函数:

    public class AccountMembershipService : IMembershipService
    {
        private readonly MembershipProvider _provider;

        public AccountMembershipService()
            : this(null)
        {
        }

您的代码首先调用此构造函数,并将
null
作为
provider
的参数传递,然后执行原始构造函数。

在您的类中很可能还有另一个构造函数如下所示:

    public class AccountMembershipService : IMembershipService
    {
        private readonly MembershipProvider _provider;

        public AccountMembershipService()
            : this(null)
        {
        }

您的代码首先调用此构造函数,并将
null
作为
provider
的参数传递,然后执行原始构造函数。

以上答案回答了所问的问题,但需要进一步说明:

这是我们用于控制反转和使单元测试成为可能的一种技术

这里是两个构造函数

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider;
}
第一个构造函数:this(null)调用第二个构造函数,将null传递给参数提供程序

这样做的一个原因是避免逻辑重复。假设你做到了:

public AccountMembershipService()
    : this(null)
{
}

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider ?? Membership.Provider;
}
虽然非常合理,但是如果您更改了_provider的名称,或者添加了一些其他初始化代码,那么您必须在两个地方对其进行修改。通过调用:this(null),现在您所有的工作只发生在一个地方

我们有两个构造函数的原因是,通过调用默认构造函数,可以使用静态实例成员资格.Provider。不幸的是,单元测试非常困难,因为现在我们依赖于成员资格提供者、数据库、有效数据等等


相反,通过创建第二个构造函数,我们现在可以传入一个mock MembershipProvider。这是一个完全不同的话题,所以如果你对它的工作原理感兴趣,请随意问另一个问题

以上答案回答了所问的问题,但更进一步:

这是我们用于控制反转和使单元测试成为可能的一种技术

这里是两个构造函数

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider;
}
第一个构造函数:this(null)调用第二个构造函数,将null传递给参数提供程序

这样做的一个原因是避免逻辑重复。假设你做到了:

public AccountMembershipService()
    : this(null)
{
}

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider ?? Membership.Provider;
}
虽然非常合理,但是如果您更改了_provider的名称,或者添加了一些其他初始化代码,那么您必须在两个地方对其进行修改。通过调用:this(null),现在您所有的工作只发生在一个地方

我们有两个构造函数的原因是,通过调用默认构造函数,可以使用静态实例成员资格.Provider。不幸的是,单元测试非常困难,因为现在我们依赖于成员资格提供者、数据库、有效数据等等


相反,通过创建第二个构造函数,我们现在可以传入一个mock MembershipProvider。这是一个完全不同的话题,所以如果你对它的工作原理感兴趣,请随意问另一个问题

谢谢,这个答案是4个答案中最好的。它正确地解释了代码在做什么。谢谢!:)谢谢,这个答案是4个答案中最好的。它正确地解释了代码在做什么。谢谢!:)