Учебное пособие по С# - Наследование и определение типа?

Я работаю по-своему, хотя это руководство упражнение 5.1 dotnetacademy. Я пробовал много разных способов решения это, и когда я пытаюсь проверить, это не сработает. Я пробовал это:

public class Atom
{
    public Atom()
    {

    }

    public Atom(int protons, int electrons)
    {
        Protons = protons;

        Electrons = electrons;
    }

    public int Protons { get; set; }

    public int Electrons { get; set; }
}


public class Program
{
    public static void Main(string[] args)
    {
    var Hydrogen = new Atom(1,2);
    }
}

и я получаю сообщение об ошибке: «Вы должны определить тип с именем Hydrogen», но я думал, что это то, что сделал var Hydrogen.

Я тоже пробовал это:

public class Atom
{

    public Atom(int protons, int electrons)
    {
        Protons = protons;

        Electrons = electrons;
    }

    public int Protons { get; set; }

    public int Electrons { get; set; }

}

public class Hydrogen : Atom
{
    public Hydrogen() : base("Atom") {}
}

public class Program
{
    public static void Main()
    {
    }
}

а этот не компилируется. В строке "public Hydrogen() : base("Atom")" есть ошибка, в которой говорится: "Нет аргумента, учитывая, что он соответствует формальному параметру "протоны" "Atom.Atom(int,int)""

Я даже спросил разработчика C#, который не может понять, почему мои попытки не работают. Кто-нибудь может помочь? Я только разбирался в этих концепциях, и теперь я застрял.

Спасибо!

Изменить: просто чтобы дать полный контекст этой ссылки, они запускают встроенный валидатор с помощью этого кода:

public class Atom
{
    public int Protons { get; set; }

    public int Electrons { get; set; }
}

public class Program
{
    public static void Main()
    {

    }
}

а инструкция такая:

  1. Создайте конструктор базового типа Atom, который принимает целое число с именем протоны и целое число электронов. Конструктор должен установить значения для связанных свойств Protons и Electrons.
  2. Реализуйте производный тип Hydrogen, который наследуется от Atom и предоставляет базовому конструктору правильные аргументы для протонов и электронов.

Я не прибегал к публикации на форуме за помощью, потому что я исследовал свой путь и пытался понять это, но мне интересно, просто ли они строги в том, «как» они хотят, чтобы это было решено, независимо от того, если вы можете решить это разными способами. Я просто хочу посмотреть, как они хотят, чтобы мы ее решили! ржу не могу

Еще раз спасибо!


person missscripty    schedule 27.04.2016    source источник


Ответы (4)


Нет аргумента, учитывая, что он соответствует формальному параметру «протоны» «Atom.Atom (int, int)».

Это конструктор базового класса:

public Atom(int protons, int electrons)

Но в производном классе вы пытаетесь использовать это:

base("Atom")

То есть вы предоставляете значение string вместо двух значений int. Вместо этого укажите значения int:

public class Hydrogen : Atom
{
    public Hydrogen() : base(1, 1) {}
}
person David    schedule 27.04.2016
comment
Спасибо, что так быстро ответили. Теперь я получаю Вы должны назвать базовый класс, передав правильное количество протонов и электронов. - person missscripty; 27.04.2016
comment
Я добавил это в общедоступную программу под main : var глупый = новый Atom(1,2); и я все еще получаю эту ошибку. - person missscripty; 27.04.2016
comment
@missscripty: я думаю, любой валидатор, который вы используете, также проверяет фактические значения. Моя ошибка, водород имеет 1 протон и 1 электрон. Я обновил свой пример соответственно. - person David; 27.04.2016
comment
Я использую валидатор прямо в ссылке, которую я указал в посте. Он проверяет это прямо там. - person missscripty; 27.04.2016

Я понял! Спасибо за помощь Давид! Вот окончательный код:

public class Atom
{

    public Atom(int protons, int electrons)
    {
        Protons = protons;
        Electrons = electrons;
    }

    public int Protons { get; set; }

    public int Electrons { get; set; }
}


public class Hydrogen : Atom
{
    public Hydrogen() : base(1, 1) {}
}

public class Program
{
    public static void Main()
    {
    var Nucleus = new Hydrogen();
    }
}
person missscripty    schedule 27.04.2016

Этот код работает нормально:

public class Atom
{
    public int Protons { get; set; }

    public int Electrons { get; set; }

    public Atom(int protons, int electrons)
    {
        Protons = protons;
        Electrons = electrons;
    }
}

public class Hydrogen : Atom
{
    public Hydrogen() : base(1, 1)
    {
    }
}

public class Program
{
    public static void Main()
    {
    }
}
person Gabriel Cardacci    schedule 12.05.2016

Я сделал очень простую ошибку, свойство = переменная запускается, а переменная = свойство приводит к ошибке компиляции.

public Atom(int protons, int electrons)
{

protons = Protons;
electrons = Electrons;
    
}

ПРОТИВ

public Atom(int protons, int electrons)
{
Protons = protons;
Electrons = electrons;
    
}
person Grishav Pokharel    schedule 21.08.2020