2017-04-24 22 views
0
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。具有多于一个参数化构造函数的抽象类和带参数化构造函数的派生类

+1

只要任何基类构造函数(包括自动生成的默认构造函数,如果适用)将由基类隐式或显式调用,则不需要其他构造函数调用。 –

+0

Thanks @MatthewWatson –

+0

对我的声明的更正:将“由基类调用”更改为“由派生类调用”。 (但我想你明白了我的意思) –

回答

0

每个子类调用它的基类构造函数,如果有一个无参数构造函数,并且我们还没有在其中实现任何基于参数的构造函数,那么会自动调用无参数,但是就像在你的情况下一样当ChildClassFirst被实例化时使用哪个构造函数,所以现在调用代码只能访问这个无参数构造函数来实例化ChildClassFirst的对象,该对象反过来将使用基于参数的构造函数实例化父类对象,该构造函数使用base()来调用。

简而言之,Child类只需要指定一个在子类的实例化过程中将要调用的基类构造,并且当没有指定时,缺省值将是无参数构造函数,它将被调用,但记住参数如果我们没有在类中指定参数化构造函数,则仅存在。

+0

谢谢@Ehsan Sajjad –

0

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

另一方面,非抽象派生类被设计为由类用户实例化。用户构建需求可能与类本身的需求完全不同,所以派生类提供了自己的构造函数。

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

+0

谢谢@dasblinkenlight –

相关问题