Конструкторы в классах C#

128
13 декабря 2019, 14:40

Пытаюсь построить иерархию классов(из Main вызывается базовый конструктор,который в зависимости от некоторых параметров вызывает один из трех подклассов.) Компилятор выдает ошибку " "***" не содержит конструктор,который принимает аргументы " и "имена членов не могут совпадать с именами типов,в которых они содержаться". Как можно это исправить?

Вызов базового класса

var Price=new Edition(EditionType, PagesNumber, PrintType); 

Сам базовый класс

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PriceCalculator
{
    public class Edition
    {
        private readonly int EditionType;
        private readonly int PagesNumber;
        private readonly int PrintType;
        public Edition(int EditionType, int PagesNumber, int PrintType)
        {
            this.EditionType = EditionType;
            this.PagesNumber = PagesNumber;
            this.PrintType = PrintType;
            int ApproxPrice = PagesNumber * PrintType;
            Calculate(ApproxPrice);

        }
        public int Calculate (int Price)
        {
            if (EditionType == 1)
            {
                int value = Convert.ToInt32(new Journal(Price));
                return value;
            }
            else { return 0; }


        }
    }
}

Класс Journal

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PriceCalculator
{
   public class Journal : Edition
    {
        private readonly int ApproxPrice;
        public Journal(int ApproxPrice)
        {
            this.ApproxPrice = ApproxPrice;
            ControlPrice(ApproxPrice);
        }
        public int ControlPrice(int Price)
        {
            Console.WriteLine("Test");
            var mult = Convert.ToInt32(Console.Read());
            return Convert.ToInt32(ApproxPrice * mult);
        }
    }
}
Answer 1

Конструктор не может что-то возвращать.

public /*int*/ Edition(int EditionType, int PagesNumber, int PrintType)
{
  this.EditionType = EditionType;
  this.PagesNumber = PagesNumber;
  this.PrintType = PrintType;
  ApproxPrice = PagesNumber * PrintType;
}

Я поменял код,но осталась одна ошибка в классе Journal "Отсутствует аргумент, соответствующий требуемому формальному параметру "EditionType" из "Edition.Edition(int, int, int)"

У родительского класса Edition нет конструктора без параметров, вызов которого компилятор пытается вставить в Ваш код. Вот он и жалуется на отсутствие первого параметра EditionType в этом вызове.

    public Journal(int ApproxPrice) : base(?, ?, ?)
    {
        this.ApproxPrice = ApproxPrice;
        ControlPrice(ApproxPrice);
    }
READ ALSO
Как можно изменить эту часть кода? Ошибка вызвана тем что я пытаюсь использовать ее в C# 4 а она как я понял из C#6

Как можно изменить эту часть кода? Ошибка вызвана тем что я пытаюсь использовать ее в C# 4 а она как я понял из C#6

Как можно изменить эту часть кода? Ошибка вызвана тем что я пытаюсь использовать ее в C# 4 а она как я понял из C# 60

118
Парсинг картинок на C#

Парсинг картинок на C#

Есть небольшая проблемаПри парсинге картинок, долго подгружаются изображения в PictureBox(разрешение 140х215, было бы чему грузится)

127
Общая строка для двух RegEx

Общая строка для двух RegEx

Существует ли способ определить факт существования строки, удовлетворяющий двум regex в реальном времениНапример для

148
C# toast notification console application

C# toast notification console application

Взял пример консольное приложение для вывода уведомлений Windows 10Уведомления показываются, но не остаются в центре уведомлений, как допустим...

147