C # Абстрактные методы, свойства только для чтения - PullRequest
0 голосов
/ 07 мая 2018

У меня есть задание (куча вещей, полиморфизм и наследование), и среди прочего я должен сделать следующее:

  1. Мне нужно добавить абстрактный класс к классу Vehicle (называемый calcOccupancy () ), который должен возвращать% оставшегося пространства в транспортном средстве. Затем я должен реализовать это в своих производных классах. Проблема здесь в том, что у меня есть 3 производных класса, два из них имеют 2 атрибута, а один имеет 3. Итак, как мне сделать мой абстрактный метод, чтобы он мог принимать 2 или 3 аргумента.

  2. Я должен добавить неизменяемое свойство к классу Person , и свойство должно вернуть первую букву имени и фамилии, разделенную точкой.

namespace Example
{
    abstract class Vehicle
    { 
        //class member variables, most likely unnecessary for the questions
        private Person driver;
        private string vehicleBrand;
        private string vehicleType;
        private double fuelConsumption;
        private double gasTankSize;
        private string fuelType;

        //the default constructor
        public Vehicle()
        {}

        //The abstract method from question 2
        // how to make it so that it wont error when I need to 
        //put in 3 variables instead of two, meaning, how would I add int c
        public abstract double calculateOccupancy (int a, int b);

        //The derived class that implements the method
        class Bus : Vehicle
        {
            private int allSeats; 
            private int allStandingSeats; 
            private int busPassengers; //the number of passengers

            //the constructor
            public Bus (int a, int b, int c)
            {
                allSeats=a;
                allStandingSeats=b;
                busPassengers=c;
            }

            //the abstract method 
            // needs to take in int b (standing seats)
            public override double calculateOccupancy(int a, int c)
            {
                 //this code calculates the leftover space in the vehicle
                 double busSpace=(busPassengers*100) / allSeats;
                 return busSpace;

                 //same code for the leftover standing space (int c)
            } 
        }
    }

    class Person
    {
        protected string name;
        protected string lastName;
        //question 1
        //properties for char gender
        protected char gender;
        //question 3
        protected readonly string initials;

        //the code errors, at the get/set
        public char Gender
        {
            get{ return gender; }
            set {gender=value;}
        }

        /*and the property im not sure how to make
        public string Initials{}
        */
    }

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

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

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

1) Заменить - Если у вас уже есть переменная char, представляющая spol, то я считаю, что вы должны использовать новый тип enum, который вы хотите создать, чтобы представлять это.

public enum Spol
{
    Moski = 0,
    Zenska = 1
}

Изменение:

protected char spol;
public char Spol
{
    get{ return spol; }
    set {spol=value;}
}

Кому: public Spol Spol { get; set; }

2) Значения по умолчанию и условия - используйте int c = 0 в качестве третьего параметра и используйте формулу / алгоритм, который игнорирует его, если это значение по умолчанию.

3) Получатели - Это свойство не имеет установщика и поэтому не может быть изменено (напрямую).

public string GiveThisAName
{
    get
    {
        if (String.IsNullOrWhiteSpace(ime))
        {
            return null;
        }

        if (String.IsNullOrWhiteSpace(priimek))
        {
            return null;
        }

        return ime[0] + '.' + priimek[0];
    }
}

Примечания

1) Сильно порекомендуйте сделать так, чтобы параметры вашей функции емкости (например, izracunajZasedenost(int a, int b)) были названы как-нибудь полезные (то есть имя, описывающее то, что они делают), кроме a и b.

2) Для протокола, # 1 больше подходит для вашего инструктора, учителя или того, кто дал вам это задание.

0 голосов
/ 07 мая 2018

Дайте "необязательным" значениям значение при создании абстрактного метода

public abstract double izracunajZasedenost (int a = -1, int b = -1) 
{
    if (a == -1){ 
        //do method with ignoring a
    }
};
...