using System.Collections.Generic;
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);
for(var i = 0; i < formas.Count; i++)
Console.Write($"Forma[{i}] => {forma.GetType()}");
Console.Write($" com Raio {(forma as Circulo).Raio}");
Console.Write($" com Lado {(forma as Quadrado).Lado}");
Console.Write($" com Altura {(forma as Retangulo).Altura} e Largura {(forma as Retangulo).Largura}");
public interface IFormaTrigonometrica
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.");
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)