C# 如何在C中从子构造函数调用父构造函数#
我试图从常驻类调用Person类构造函数 人:C# 如何在C中从子构造函数调用父构造函数#,c#,class,inheritance,parent,C#,Class,Inheritance,Parent,我试图从常驻类调用Person类构造函数 人: 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
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)
我试过基本命令,但从来都不起作用
请帮忙
------------更新----------------
问题解决了
谢谢你的帮助和建议
我试过基本命令,但从来都不起作用
这不是一个真正的“命令”,但它确实有效:
Resident(String aIDNumberPrim, String aIDNumberSec1,String aIDNumberSec2,
String aIDNumberSec3, String aIDNumberSec4, String aTempId,
String aPassportNumber)
: base(...)
{
}
诚然,现在还不清楚你会在这里传递什么,因为你的参数中没有一个显示名字或地址等。。。也许您需要添加更多的参数
编辑:正如Adam所指出的,您需要增加Person
构造函数的可见性,除非Resident
在Person
中声明为嵌套类型。如果只需要在Resident
的程序文本中调用Resident
构造函数,那么Resident
构造函数可以保持私有状态,但更可能的是,您也希望增加其可见性
(作为旁注,这些参数名称很可怕-为什么在所有参数前面都加上
a
?)当前,由于您没有包含一个参数,您的构造函数都默认为private
。如果Person
构造函数是私有的,而Resident
类是独立的(即,如Jon Skeet所解释的,没有嵌套在Person
中),即使它是从它继承的,它也不会看到构造函数
只需向它们添加一个修饰符,例如public
、protected
或internal
:
protected Person(
然后,您可以正常调用base
:
public Resident()
: base()
{
}
如果希望构造函数的访问权限是公共的,则应为构造函数添加
public
关键字:
public Person(String aName, String aSurname, String aAddress1,
String aAddress2, String aTelephone, String aFaxNumber)
{
...
}
如果它们在同一个项目上,也可以使用internal
,或者protected
,因为一个是另一个的基础,等等,但这一切都取决于您真正想要访问的ctor修改器
默认的访问修饰符是
private
,它不允许来自该类之外的任何内容访问该类。在我看来,这应该可以:
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(...)
亲切问候,pro在您输入常驻构造函数的参数列表中的右括号后,尝试在大括号前说“:Person(…)”,并在“…”中提供适当的参数:
Resident(字符串aName、字符串aSurname、字符串aaddress 1、字符串aaddress 2、字符串aTelephone、字符串aFaxNumber、,
字符串AIDNUMBERRIM、字符串AIDNUMBERSC1、字符串AIDNUMBERSC2、字符串AIDNUMBERSC3、字符串AIDNUMBERSC4、字符串aTempId、字符串aPassportNumber)
:Person(aName、aSurname、aaddress 1、aaddress 2、电话录音机、aFaxNumber)
{
}
为什么不起作用?它说了什么?除了回答关于当它不工作时会发生什么的问题外,请显示您尝试base
失败的代码,这样我们可以告诉您它有什么问题。好的,我现在已经按照您的建议编辑了代码,但是base()中的每个参数都给出了错误消息:“名称‘xxx’在当前上下文中不存在。”其中,xxx替换为适当的参数。