public static void Main()
Metodo(new ClasseTeste(){ Obj = new Registro(){ Nome = "Nome Teste"}});
Metodo2(new ClasseTeste(){ Obj = new Registro(){ Nome = "Nome Teste2"}});
Metodo3(new ClasseTeste(){ Obj = new Registro(){ Nome = "Nome Teste3"}});
public static void Metodo<T>(IBase<T> parametro) where T: class,IRegistro
string nome = parametro.Obj.Nome;
public static void Metodo2(IBase<IRegistro> parametro)
string nome = parametro.Obj.Nome;
public static void Metodo3(Teste<IRegistro> parametro)
string nome = parametro.Obj.Nome;
public interface IRegistro
public class Registro : IRegistro
public string Nome {get;set;}
public interface IBase<T> where T : class
public abstract class Teste<T> : IBase<T> where T : class, IRegistro
public class ClasseTeste : Teste<Registro>