2011-03-17 84 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)  
    {  
    } 
} 

嘗試上面的代碼。