带有多个参数化构造函数的抽象类和带参数化构造函数的派生类

时间:2017-04-24 09:51:26

标签: c# asp.net

public class ParentBaseClass
{
    public ParentBaseClass()
    {
        // Parameter less constructor
    }
    public ParentBaseClass(string type)
    {
        // single parameter constructor
    }
    public ParentBaseClass(Entity model)
    {
        // entity type constructor
    }
    public ParentBaseClass(string type, bool IsNewEntity)
    {
        // two parameter constructor
    }
    public ParentBaseClass(string type, bool IsNewEntity, Entity model)
    {
        // three parameter constructor
    }
}

public class ChildClassFirst : ParentBaseClass
{
    public ChildClassFirst() : base("Customer", false)
    {
        // implementation of 4th constructor having string, bool parameters.
    }
}
子类中的

我只实现了一个具有两个参数的父类的构造函数。为什么不需要实现其他构造函数?有谁能解释我?请考虑其他构造函数可能有MVC Model类或dbContext的其他实体类。

2 个答案:

答案 0 :(得分:0)

每个子类都调用它的基类构造函数,如果有一个无参数构造函数并且我们没有在其中实现任何基于参数的构造函数,则会自动调用无参数,但是在您的情况下,您指定哪个实例化ChildClassFirst时要使用的构造函数,所以现在调用代码只能访问这个无参数的构造函数来实例化ChildClassFirst的对象,而base()的对象又使用基于参数的实例化父类对象使用.slick-arrow[aria-disabled="true"]{ opacity: .5; }调用的构造函数。

简而言之,Child类只需要指定一个基类构造,它将在子类的实例化期间调用,当没有指定时,默认将是无参数构造函数,它将被调用,但请记住参数 - 如果我们没有在类中指定参数化构造函数,则仅存在。

答案 1 :(得分:0)

抽象类是为其他类继承而设计的,通常不止一个。不同的派生类可能需要以稍微不同的方式构造它们的抽象基类。因此,抽象类可以为不同的派生类提供不同的构造函数。

另一方面,非抽象派生类旨在由类用户实例化。用户构造需求可能与类本身的需求完全不同,因此派生类提供了自己的构造函数。

因此,这两组构造函数完全相互独立:它们满足不同的需求。派生类可以提供更多或更少的构造函数,并且它们的构造函数的签名可以是相似的或完全不同的。在您的代码中就是这种情况:ChildClassFirst提供无参数构造函数,而其抽象基类提供两个具有不同参数集的构造函数。只要在派生类中提供任何构造函数,C#编译器就可以使用您的代码。