2012-07-30 145 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) 
{ 

} 
相關問題