2011-03-17 57 views
3
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) 
    { 

    } 
} 

上面的代码生成错误“无效的表达式项INT” 出了什么问题?错误调用基类的构造C#

+1

看起来答案没有指出的一点是,构造函数中的'int name'可能应该是'string name'(但编译器会很快显示出来)。 – 2011-03-17 14:11:59

+0

@Mark:很好,相应地更新了我的答案。 – Jon 2011-03-17 14:20:58

回答

2

您不需要在调用base时重复类型名称。它应该是: -

class SubStudent : Student 
{  
    int ssn;  
    public SubStudent(int id, string name, int ssn) 
     : base(id, name) 
    { 
    } 
} 
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) 

你是不是再次宣告基本构造的签名,你只是调用它。和任何其他呼叫一样,参数的类型在呼叫站点没有指定。

编辑:SubStudent构造函数的参数列表修正int namestring name

1

你不应该把类型的基础构造函数调用:

public SubStudent(int id, int name, int ssn) 
     : base(id, name) 
    { 

    } 
2

正如乔恩说,这是我们正在调用基类的构造方式。

的想法是你提供参数到基类的构造,没有宣布参数。所以,你使用相同的语法,如果你调用一个方法:

base(id, name) 

注意的参数没有来自于你自己的构造函数的参数。这将是有效的,例如:

public SubStudent(int id, int name, int ssn) : base(10, "fixed name") 

在这种情况下,它不太可能是可取的,但它是有效的:)

0
class SubStudent : Student 
{  
    int ssn;  
    public SubStudent(int id, int name, int ssn)   
     : base(id, name)  
    {  
    } 
} 

尝试上面的代码。