Member 12792318 Ответов: 1

Возвращает объект типа shape


public abstract class Shape
   {
       public virtual double GetArea()
       {
           return 0;
       }

       public static Shape CreateShape(string input)
       {
           //write code for this method

       }
   }







public class Square : Shape
    {
        public double Width { get; set; }
        public double Height { get; set; }

        public Square(double width, double height)
        {
            this.Width = width;
            this.Height = height;
        }

        public override double GetArea()
        {
            return this.Width * this.Height;
        }
    }







public class Circle : Shape
    {
        public double Radius { get; set; }

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

        public override double GetArea()
        {
            return Math.PI * this.Radius * this.Radius;
        }
    }


Что я уже пробовал:

public static Shape CreateShape(string input)
        {

            string[] val = input.Split(' ');
            string value = "Shape type: " + val[0] + "\nLength: " + val[1] + "\nWidth: " + val[2];
            Object myshape = value;
            return (Shape) myshape;
        }



Я пробовал вышеописанное, по сути, то, что я пытаюсь сделать, - это вернуть объект в CreateShape, когда он мгновенно создается в основном классе

пример установки: форма квадрат = форма.CreateShape("квадрат 30 9");

1 Ответов

Рейтинг:
0

OriginalGriff

Нет. Это просто неправильно.

Когда вы пишете это:

string value = "Shape type: " + val[0] + "\nLength: " + val[1] + "\nWidth: " + val[2];
Object myshape = value;
return (Shape) myshape;
переменная myshape не волшебным образом получается содержать фигуру - это все равно строка, содержащаяся в переменной, которая может содержать любой тип значения (потому что все в конечном счете происходит от класса объектов).
Если вы хотите вернуть фигуру, то вам нужно создать объект Square или Circle, потому что только они являются производными от Shape (а shape является абстрактным, поэтому вы не можете создать экземпляр напрямую).

Подумайте об автомобилях: автомобиль-это абстрактное понятие (или класс в терминах c#) - теоретически вы можете водить любую машину, но вам нужно сесть в Ford Fiesta или Mercedes A-класса, чтобы доехать до магазинов.
Автомобиль-это абстракция, Ford Fiesta-это конкретный класс, а "этот автомобиль" - это экземпляр. Чтобы доехать до магазинов, вы попадаете в экземпляр: "я отпер эту машину и уехал".
То, что вы пытаетесь сделать, - это "я нашел цитату Монти Пайтона в кармане и поехал в магазины", что не имеет никакого смысла.


В вашем методе вам нужно иметь экземпляр фигуры, чтобы вернуть ее - что означает создание круга или квадрата - вы не можете вернуть строку и заставить ее "просто стать фигурой" самостоятельно.
Shape thisShape = new Circle(10);


Member 12792318

Я понимаю это, но это заданный тип формы в основном классе, где я называю его с помощью Shape square = Shape.CreateShape("квадрат 30 9);

мой вопрос состоял в том,что для метода CreateShape, как я могу заставить его вернуть объект Shape?

OriginalGriff

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