Вопрос наследования C # - PullRequest
       7

Вопрос наследования C #

0 голосов
/ 23 сентября 2011

У меня небольшая проблема с наследованием в моем приложении.У меня есть клиент базового класса, у которого есть подкласс Job.По сути, я пытаюсь создать конструктор для Job, но получаю сообщение об ошибке: «Job_Manager_Application.Client» не содержит конструктор, который принимает 0 аргументов »

Не могу понять, почемуэто?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Ваш класс Client имеет конструктор, который принимает параметры.

Поэтому вашему конструктору Job необходимо передать параметры клиенту.

Пример:

class Client{
    public string Name {get;set;}
    public Client(string name){
        this.Name = name;
    }
}

-

class Job:Client{
    public double Rate {get;set;}

    public Job(double rate){
        // This won't compile, because Client won't have its "name" parameter.
    } 

    public Job(string name, double rate) : base(name){
        // So you need to pass a parameter from your Job constructor using "base" keyword.
        this.Rate = rate;
    }

    public Job(double rate) : base("Default Name"){
        // You could do this, this is legal.
    } 
}
2 голосов
/ 23 сентября 2011

Почему Job является подклассом Client?Наследование представляет собой - это отношения (a Cat - это Animal, поэтому class Cat : Animal { }).A Job - это , а не a Client.

В любом случае, ваше сообщение об ошибке ясно.У вас нет доступного конструктора без параметров в Client.Затем вам нужно явно вызвать конструктор на клиенте из конструктора Job.

class Client {
    public string Name { get; set; }
    public Client(string name) { this.Name = name; }
}

class Job : Client {
    public Job(string name) : base(name) { }
}

Видите, что base(name) там?Это вызывает базовый конструктор Client.Client(string) на Client.Если вы не укажете базовый конструктор явно, компилятор попытается найти доступный конструктор без параметров.Если его нет, вы получаете ошибку времени компиляции, с которой вы столкнулись.

Итак, вам нужно либо сделать, как я делал выше, что вызвать available без параметровявный конструктор или добавьте конструктор без параметров в Client.

Но, пожалуйста, переосмыслите свою модель.A Job не является Client.

1 голос
/ 23 сентября 2011

У клиента есть конструктор, который принимает аргументы, а вы его неправильно вызываете

public class Job
{
    public Job(int num) { }
}

public class Client : Job
{
    public Client() : base(1) {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...