class Student
{
int id;
string name;
public Student(int id, string name)
{
this.id = id;
this.name = name;
}
public int Id
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
}
class SubStudent : Student
{
int ssn;
public SubStudent(int id, int name, int ssn)
: base(int id, string name)
{
}
}
上面的代码生成错误“term int的无效表达式” 可能有什么不对?
答案 0 :(得分:11)
public SubStudent(int id, string name, int ssn)
: base(int id, string name)
应该是
public SubStudent(int id, string name, int ssn)
: base(id, name)
您没有再次声明基本构造函数的签名,您只是在调用它。和任何其他调用一样,调用站点未指定参数类型。
修改:在int name
ctor的参数列表中将string name
更正为SubStudent
。
答案 1 :(得分:2)
您无需在对base的调用中重复类型名称。它应该是: -
class SubStudent : Student
{
int ssn;
public SubStudent(int id, string name, int ssn)
: base(id, name)
{
}
}
答案 2 :(得分:2)
正如乔恩所说,这就是你调用基础构造函数的方式。
我们的想法是为基础构造函数提供参数,而不是声明参数。因此,您使用与调用方法时相同的语法:
base(id, name)
请注意,参数不必来自您自己的构造函数参数。这将是有效的,例如:
public SubStudent(int id, int name, int ssn) : base(10, "fixed name")
在这种情况下,它不太可取,但它是有效的:)
答案 3 :(得分:1)
您不应该在基础构造函数调用中输入类型:
public SubStudent(int id, int name, int ssn)
: base(id, name)
{
}
答案 4 :(得分:0)
class SubStudent : Student
{
int ssn;
public SubStudent(int id, int name, int ssn)
: base(id, name)
{
}
}
尝试以上代码。