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

    } 
} 

Приведенный выше код выдает ошибку «Недопустимое выражение для термина междунар» Что может быть не так?ошибка вызова базового конструктора C#

+1

Одна вещь, кажется, что ответы не указывают на то, что 'int name' в конструкторе должно быть, вероятно,' string name' (но компилятор покажет вам это достаточно скоро). –

+0

@Mark: Хороший улов, обновил мой ответ соответственно. – Jon

ответ

2

Вам не нужно повторять имена типов в вызове на базу. Оно должно быть: -

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) 

Вы не раз объявляя подпись базового конструктора, вы просто называть его. И, как и в любом другом вызове, типы параметров не указаны на сайте вызова.

Edit: исправлен int name в string name в списке параметров SubStudent CTOR.

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)  
    {  
    } 
} 

Try выше кода.

Смежные вопросы