Список требует аргумента типа - PullRequest
0 голосов
/ 18 декабря 2018

При компиляции кода есть три ошибки.1. Использование универсального типа List требует 1 аргумента.2. Использование универсального типа List требует 1 аргумента.3. оператор foreach не может работать с переменными типа, потому что List не содержит общедоступного определения для GetEnumerator

Программа примера полиморфизма приведена ниже.

namespace PolymorExample
{
    abstract class Shape
    {
        public abstract void area();
    }

    class Rectangle : Shape
    {
        private double length;
        private double width;

        public Rectangle(double length, double width)
        {
            this.length = length;
            this.width = width;
        }

        public override void area()
        {
            Console.WriteLine("Rectangel Area: {0}", length * width);
        }
    }

    class Triangle : Shape
    {
        private double baseline;
        private double height;

        public Triangle(double baseline, double height)
        {
            this.baseline = baseline;
            this.height = height;
        }

        public override void area()
        {
            Console.WriteLine("Triangel Area: {0}", baseline * height / 2.0);
        }
    }

    class Circle : Shape
    {
        const double PI = 3.14;
        private double radius;

        public Circle(double radius)
        {
            this.radius = radius;
        }

        public override void area()
        {
            Console.WriteLine("Circle Area: {0}", radius * radius * PI);
        }
    }

    public class TestShape
    {
        static void Main()
        {
            List shapes = new List();
            Shape shape1 = new Rectangle(10, 10);
            shapes.Add(shape1);
            shapes.Add(new Circle(10));
            shapes.Add(new Triangle(10, 10));
            shapes.Add(new Circle(20));

            foreach (Shape s in shapes)
            {
                s.area();
            }

            Console.Read();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если вы посмотрите на документацию для List<T> класса , вы заметите, что List является универсальным типом (отсюда <T>),и универсальные типы требуют параметра (или более), который указывает тип (типы) объекта, который он будет использовать / содержать.Вы должны указать некоторый тип, даже если это просто object.

В вашем случае у вас есть список Shape объектов, поэтому ваш код инициализации можно изменить (и упростить, используя синтаксис инициализатора коллекции), чтобы указать этот тип:

var shapes = new List<Shape>
{
    new Rectangle(10, 10),
    new Circle(10),
    new Triangle(10, 10),
    new Circle(20)
};
0 голосов
/ 18 декабря 2018
List<Shape> shapes = new List<Shape>();

вам нужен тип фигуры в вашем объявлении списка, чтобы он знал, что это список

...