2012-07-30 70 views
0

我想从我的生化类叫我Person类的构造函数如何调用父类的构造从孩子的构造函数在C#

人:

public class Person 
{ 
    private String name; 
    private String surname; 
    private String address1; 
    private String address2; 
    private String telephone; 
    private String faxNumber; 

    Person(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber) 
    { 
     name = aName; 
     surname = aSurname; 
     address1 = aAddress1; 
     address2 = aAddress2; 
     telephone = aTelephone; 
     faxNumber = aFaxNumber; 
    } 

居民:

public class Resident : Person 
{ 
    private String IDNumberPrim; 
    private String IDNumberSec1; 
    private String IDNumberSec2; 
    private String IDNumberSec3; 
    private String IDNumberSec4; 
    private String tempID; 
    private String passportNumber; 


    Resident(String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber) 

我已经尝试了基本命令,但它永远不会工作。

请帮忙!!!

------------ UPDATE ----------------

问题解决了。

感谢所有帮助和建议

+2

为什么它不起作用?它说什么? – 2012-07-30 14:20:33

+0

除了回答有关在不起作用时会发生什么的问题之外,请显示您尝试使用“base”的代码失败,因此我们可以告诉您它出了什么问题。 – phoog 2012-07-30 14:22:45

回答

0

您应该添加public关键字为构造函数,如果你想它的访问被公开:

public Person(String aName, String aSurname, String aAddress1, 
       String aAddress2, String aTelephone, String aFaxNumber) 
{ 
    ... 
} 

你也可以使用internal如果他们在同一个项目上,或者protected,因为一个是另一个的基础等等,但这一切都取决于你真正想要访问ctor的修饰符。

默认访问修饰符是private,它不允许该类以外的任何内容访问该修饰符。

3

我已经试过了基本命令,但它永远不会奏效。

这不是一个真正的“命令”,但它肯定工程:

Resident(String aIDNumberPrim, String aIDNumberSec1,String aIDNumberSec2, 
     String aIDNumberSec3, String aIDNumberSec4, String aTempId, 
     String aPassportNumber) 
    : base(...) 
{ 
} 

诚然,目前还不清楚你会通过什么在这里了,因为没有你的参数似乎表明名称或地址等...也许你需要添加更多的参数?

编辑:另外由亚当指出的,你需要增加你的Person构造的知名度,除非Resident被声明为内Person嵌套类型。如果您只需要在Resident的程序文本中调用该构造函数,则Resident构造函数就可以保持私有状态,但是您更希望提高其可见性。

(作为一个侧面说明,这些参数名称是可怕的 - 为什么前缀一切与a?)

4

目前你的构造函数都默认为private,因为您还没有一个access modifier。如果Person构造函数是私有的,并且Resident类是分开的(即,不像Jon Skeet解释的那样嵌套在Person中),即使它是从它继承的,它也不会看到构造函数。

一个简单的修改添加到他们,像publicprotectedinternal

protected Person(

然后你就可以调用到base正常:

public Resident() 
    : base() 
{ 
} 
+0

好吧,我现在已经按照你的建议修改了代码,但现在base()中的所有参数都给出错误消息:“名称'xxx'在当前上下文中不存在。”其中xxx代替适当的参数。 – 2012-07-31 11:53:37

0

在我看来,这应该工作:

public class Person 
{ 
    private String name; 
    private String surname; 
    private String address1; 
    private String address2; 
    private String telephone; 
    private String faxNumber; 

    public Person(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber) 
    { 
     name = aName; 
     surname = aSurname; 
     address1 = aAddress1; 
     address2 = aAddress2; 
     telephone = aTelephone; 
     faxNumber = aFaxNumber; 
    } 

public class Resident : Person 
{ 
    private String IDNumberPrim; 
    private String IDNumberSec1; 
    private String IDNumberSec2; 
    private String IDNumberSec3; 
    private String IDNumberSec4; 
    private String tempID; 
    private String passportNumber; 


    Resident(String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber) : base(...) 

亲切的问候,亲

0

你的右括号后的居民的构造函数的PARAM名单,试着说“:人(...)”前在'...'中提供适当的参数:

Resident(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber, 
    String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber) 
: Person (aName, aSurname, aAddress1, aAddress2, aTelephone, aFaxNumber) 
{ 

} 
相关问题