Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Обработка объектов различных производных классов


Автор: Madstar 10.12.2009, 12:44
Добрый день! изучаю программирование на C# вот возник вопрос

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ShapeVirtual
{
    abstract class Shape
    {
        protected int xPos;
        protected int yPos;

        public Shape(int x, int y)
        {
            xPos = x;
            yPos = y;
        }

        abstract public void Draw(int x, int y);
    }
    class Point : Shape
    {
        public Point(int x, int y) : base(x,y)
        {
        }

        public override void Draw(int x, int y)
        {
            Console.WriteLine("Рисование точки в ({0}, {1})", x, y);
            xPos=x;
            yPos=y;
        }
    }
    class Rectangle : Shape
    {
        int widht;
        int height;

        public Rectangle(int x, int y, int w, int h) : base(x, y)
        {
            widht = w;
            height = h;
        }

        public override void Draw(int x, int y)
        {
            Console.WriteLine("Рисование прямоугольника в ({0}, {1})", x, y);
            xPos = x;
            yPos = y;
        }
    }
    class ShapeVirtualApp
    {
        static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);

            foreach (Shape currentShape in allShapes) currentShape.Draw(1, 0);

                Console.ReadLine();
        } 
    }
}



Вобщем тут все четыре фигуры "рисуются" в одной точке с координатами (1,0), как можно изменить цикл таким образом, чтобы каждая фигура была нарисована на своем месте?

Автор: tol05 10.12.2009, 13:09
Цитата(Madstar @  10.12.2009,  11:44 Найти цитируемый пост)
Вобщем тут все четыре фигуры "рисуются" в одной точке с координатами (1,0)

Вы в конструкторе объекта инициализируете его координаты определенными значениями, а в методе Draw эти значения сами и перезаписываете. По-моему изначально логика построения фигуры неправильна. 

Вообще-то говоря, нужно координаты рисования задавать при рисовании, а не в конструкторе. И координаты задавать для каждой из фигур отдельно.
Но уж если Вы настаиваете на цикле... Тогда не задавайте координаты в методе Draw
Код

...
abstract public void Draw();
...
static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);
            foreach (Shape currentShape in allShapes) currentShape.Draw();
                Console.ReadLine();
        } 

Автор: Madstar 10.12.2009, 13:44
Этот пример рассматривается в самоучителе и там как раз обращают внимание на изменение цикла, чисто в учебных целях видимоsmile
Просто я думал есть возможность рисовать фигуры задавая разные координаты в методе Draw()

ладно, спасибо за консультацию smile

Автор: STRELOKBMSTU 10.12.2009, 14:56
Код

...
abstract public void Draw();
...
static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);

            for (int i=0, j=0; i<4; i++, j+=2)
                currentShape.Draw(i,j);
            
                Console.ReadLine();
        } 


Или так smile 

Автор: Madstar 11.12.2009, 06:19
to STRELOKBMSTU :

ругается на currentShape, нужно его определить видимо сначала.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)