Исправление неявно типизированной ошибки с несколькими вызовами классов - PullRequest
0 голосов
/ 24 апреля 2019

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

Инструктор предоставил несколько классов, которые помогают с этим заданием, и я конвертирую то, что он предоставил, для работы с моим проектом; его код и мой очень похожи, но он не возвращает ошибок.

Детский класс:

    class InHouse : Part
    {
        public int machineID;
        public InHouse() { }

        public InHouse(int ParID, string ParNa, double ParPrice, int ParInSto, int ParMaxSto, int ParMinSto, int MachID) : base(ParID, ParNa, ParPrice, ParInSto, ParMaxSto, ParMinSto)
        {
            machineID = MachID;
        }
    }

Абстрактный родительский класс:

    abstract class Part : Form 
    {
        public String PartName { get; set; }
        public int PartID { get; set; }
        public double price;
        public int inStock;
        public int maxStock;
        public int minStock;

        public int getPartID() { return PartID; }

        public string getPartName() { return PartName; }
        public double getPartPrice() { return price; }
        public int getPartInStock() { return inStock; }
        public int PartMaxStock() { return maxStock; }
        public int PartMinStock() { return minStock; }

        public Part() { }

        public Part(int partID, string partName, double partPrice, int partInStock, int partMaxStock, int partMinStock)
        {
            PartID = partID;
            PartName = partName;
            price = partPrice;
            inStock = partInStock;
            maxStock = partMaxStock;
            minStock = partMinStock;
        }

    }

Вызов функции, вызывающей ошибку:

        private void AddPartSave_Click(object sender, EventArgs e)
        {
            if (isInHouse)
            {
                AllPartsList prt = new InHouse(Convert.ToInt32(ModifyPartIDBox.Text), ModifyPartNameBox.Text, Convert.ToDouble(ModifyPartPriceCostBox.Text), Convert.ToInt32(ModifyPartInventoryBox.Text), Convert.ToInt32(ModifyPartMaxInvBox.Text), Convert.ToInt32(ModifyPartMinBox.Text), Convert.ToInt32(PartMachineOrCompanyBox.Text));
            }

Список классов:

     class AllPartsList
    {
        private static BindingList<Part> partsList = new BindingList<Part>();
        public static BindingList<Part> PartsList { get { return partsList; } set { partsList = value; } }

        public static Part CurrentPart { get; set; }
        public static int CurrentPartID { get; set; }
        public static int CurrentPartIndex { get; set; }

        public static Part lookupPart(int i)
        {
            for (int j = 0; j < PartsList.Count; j++)
            {
                if (PartsList[j].PartID.Equals(i))
                {
                    CurrentPartIndex = j;
                    return PartsList[j];
                }
            }
            CurrentPartIndex = -1;
            return null;
        }
    }

Исходя из того, что я вижу в коде инструктора, это должно работать, но ошибка компилятора

Невозможно неявно преобразовать тип 'InventorySystem.InHouse' в 'InventorySystem.AllPartsList'

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Вы объявляете

AllPartsList prt

, что означает, что prt имеет тип AllPartsList.

Но new Inhouse создает, ну, новый объект типа InHouse.Вы не можете объявить переменную типа AllPartsList и присвоить ей что-то совершенно другое.

Это было бы похоже на следующее:

int x = new DateTime(2019,4,23);

x - это intпоэтому я не могу присвоить ему DateTime.

0 голосов
/ 24 апреля 2019

Вы преобразуете объект InHouse в AllPartsList в своей вызывающей функции.

AllPartsList prt = new InHouse(Convert.ToInt32(ModifyPartIDBox.Text), ModifyPartNameBox.Text, Convert.ToDouble(ModifyPartPriceCostBox.Text), Convert.ToInt32(ModifyPartInventoryBox.Text), Convert.ToInt32(ModifyPartMaxInvBox.Text), Convert.ToInt32(ModifyPartMinBox.Text), Convert.ToInt32(PartMachineOrCompanyBox.Text));
...