2016-07-16 7 views
0

Друг недавно было интервью по телефону, и он был задан вопрос технический вопрос:Вычислить площадь поверхности 2D формы

Q) Если бы я хотел, чтобы вычислить площадь поверхности некоторых 2D форм, то, что «ковша» будет Я использую. У него было 20 минут, чтобы написать код, и интервьюер позвонил ему. Он отправил код по электронной почте, и код не обсуждался на оставшуюся часть интервью (других технических вопросов не было). Он прислал мне код: приложение

namespace ShapesApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      this.Load += form_load; 
     } 

     public void form_load (Object o, EventArgs e) 
     { 
      List<Shape> listShape = new List<Shape>(); 
      Shapes.Circle circle = new Shapes.Circle(); 
      Shapes.Rectangle rectangle = new Shapes.Rectangle(); 
      Shapes.Square square = new Shapes.Square(); 
      Shapes.Triangle triangle = new Shapes.Triangle(); 
      listShape.Add(rectangle); 
      listShape.Add(square); 
      listShape.Add(triangle); 

      foreach (Shape shape in listShape) 
      { 
       double a = 10; 
       double b = 10; 
       double surfaceArea = shape.CalculateSurfaceArea(a,b); 
       Console.WriteLine("The surface area of a " + shape.GetType() + " is: " + surfaceArea); 
      } 
     } 

    } 
} 

Windows Forms Shapes - класс Библиотека

namespace Shapes 
{ 
    public abstract class Shape 
    { 
     abstract public double CalculateSurfaceArea(double Double1, double Double2); 
    } 

    public class Circle : Shape 
    { 
     public override double CalculateSurfaceArea(double pi, double radius) 
     { 
      return (pi * radius) * (pi * radius); 
     } 
    } 

    public class Triangle : Shape 
    { 
     public override double CalculateSurfaceArea(double Base, double Height) 
     { 
      return (Base*Height)/2; 
     } 
    } 

    public class Rectangle : Shape 
    { 
     public override double CalculateSurfaceArea(double Length, double Width) 
     { 
      return Length * Width; 
     } 
    } 

} 

интервьюер сказал, что он "боролся" с тестом. Что не так с кодом?

+0

Почему с помощью формы Windows, если результат будет печататься в консоли? – Fabio

+0

pi - постоянная, поэтому почему она передается как параметр и неверно квадрат? – jdweng

+0

Так что я могу назначить 'pi = -15.789'? '... CalculateSurfaceArea (double pi, double radius) ...'; Я могу иметь квадрат * с 'Length'! =' Width'? –

ответ

0

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

Так что я думаю, что метод вычисления площади можно абстрагировать в качестве интерфейса:

public interface ICalculatingArea 
{ 
    double CalculateArea(); 
} 

Тогда каждая форма будет осуществлять его на свой манер.

public class Rectangle:ICalculatingArea 
{ 

    public double Width {get; set;} 
    public double Length {get; set;} 

    public double CalculateArea() 
    { 
     return Length * Width; 
    } 
} 

В основной программе достаточно, чтобы бросить классы формы с типом интерфейса и использовать CalculateArea метод

Смежные вопросы