Formas trigonométricas.

CSharp · Console

/Program.cs

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) 
	{
	}
}
;