CSharp · Console
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var formas = new List<IFormaTrigonometrica>();
var circulo = new Circulo(10);
var quadrado = new Quadrado(5);
var retangulo = new Retangulo(7, 3);
formas.Add(circulo);
formas.Add(quadrado);
formas.Add(retangulo);
for(var i = 0; i < formas.Count; i++)
{
var forma = formas[i];
Console.Write($"Forma[{i}] => {forma.GetType()}");
if(forma is Circulo)
Console.Write($" com Raio {(forma as Circulo).Raio}");
if(forma is Quadrado)
Console.Write($" com Lado {(forma as Quadrado).Lado}");
if(forma is Retangulo)
Console.Write($" com Altura {(forma as Retangulo).Altura} e Largura {(forma as Retangulo).Largura}");
Console.WriteLine();
}
}
}
public interface IFormaTrigonometrica
{
float Altura { get; }
float Largura { get; }
}
public abstract class FormaTrigonometrica : IFormaTrigonometrica
{
public float Altura { get; protected set; }
public float Largura { get; protected set; }
public FormaTrigonometrica(float altura, float largura)
{
if(altura <= 0 || largura <= 0) throw new ArgumentException("Formas trigonometricas devem ter tamanhos superiores à zero.");
Altura = altura;
Largura = largura;
}
}
public class Circulo : FormaTrigonometrica
{
public float Raio => base.Altura;
public Circulo(float raio) : base(raio, raio)
{
}
}
public class Retangulo : FormaTrigonometrica
{
public Retangulo(float ladoA, float ladoB) : base (ladoA, ladoA)
{
if(ladoA == ladoB) throw new ArgumentException("Retangulo devem ter tamanho de lados diferentes");
}
}
public class Quadrado : FormaTrigonometrica
{
public float Lado => base.Altura;
public Quadrado(float lado) : base (lado, lado)
{
}
}