Как правильно организовать класс

292
09 марта 2017, 20:41

Добрый день!

Хочется унифицировать написание нескольких классов. Если объяснять на кошечках: Принципиально иметь коллекцию объектов. Есть один класс - куб. У него есть метод вычисления объема и несколько свойств. Есть другой класс - цилиндр, у него те же свойства и тот же метод вычисления объема, понятно что реализация отличается. И т.д. Как создать объект класса List чтобы в него могли быть затолканы объекты разных классов? Какой класс указывать при созднии List?

Answer 1

Пока я готовил пример, Вам уже ответили, но на всякий случай добавлю пример

    interface IGeometry
{
    double VolumeCount();
}
class Sfera : IGeometry
{
    double diametr;
    public Sfera(double _diametr)
    {
        diametr = _diametr;
    }
    public double VolumeCount()
    {
        return 3.14 * 3 / 4 * diametr * diametr * diametr;
    }
}
class Cube : IGeometry
{
    double vertexSize;
    public Cube(double _size)
    {
        vertexSize = _size;
    }
    public double VolumeCount()
    {
        return vertexSize * vertexSize * vertexSize;
    }
}

Соответственно использовать как-то так:

            List<IGeometry> lstGeometry = new List<IGeometry>();
        lstGeometry.Add(new Cube(20.0));
        lstGeometry.Add(new Sfera(10.0));
Answer 2

Можно это решить через интерфейс, всяко это будет лучше чем вариант с List<object>

public interface IHasVolume
{
    string Name { get; set; }
    double Volume { get; }
}
public class Cube : IHasVolume
{
    public double Volume
    {
        get
        {
            return 9;
        }
    }
    public string Name { get; set; }
}
public class Cylinder : IHasVolume
{
    public double Volume
    {
        get
        {
            return 7.4;
        }
    }
    public string Name { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        //вот используем интерфейс
        List<IHasVolume> list = new List<IHasVolume>()
        {
            new Cube() { Name = "Куб" },
            new Cylinder() { Name = "Цилиндр" }
        };
        list.ForEach(f => Console.WriteLine($"Фигура: {f.Name}={f.Volume}"));
        Console.ReadKey();
    }
}
READ ALSO
Как сделать переменную видимой во всех контроллерах?

Как сделать переменную видимой во всех контроллерах?

К примеру, в шапке сайта отображаются какие-то данные, которые берутся из БДПри переходе на другой маршрут, который обрабатывает другой контроллер,...

272
PHP+MySQL реализовать сервис приёма статистики игровых данных [требует правки]

PHP+MySQL реализовать сервис приёма статистики игровых данных [требует правки]

На базе PHP+MySQL реализовать сервис приёма статистики игровых данных, в которой содержится: - ID игрока в Facebook - игровое время события - ID устройства...

284
Как лучше защить шаблон от копирования?

Как лучше защить шаблон от копирования?

Есть несколько шаблонов на продажу для opencart и встал вопрос, каким методом пользоваться для выдачи лицензий на эти шаблоны?

220
Yii2: Как сохранять мульти поле в базу данных?

Yii2: Как сохранять мульти поле в базу данных?

Подскажите как в Yii 2 правильно создать поле с множественным значением типа чекбокс и записать его в БД?

310