No, no puede haber constructores en las interfaces por los motivos que se han publicado. Sin embargo, puedes en clases abstractas. Digamos, por ejemplo, que tienes esta clase base.
public abstract class ClassOne
{
protected int _x;
protected string _s;
public ClassOne(int x, string s)
{
_x = x;
_s = s;
}
}
Note que no hay constructores que no toma ningún argumento (constructor por defecto) lo que significa cualquier clase que hereda de ClassOne deben llamar al constructor que tiene 2 argumentos.
Esto no es válido y no se compilará.
public class ClassTwo : ClassOne
{
public ClassTwo()
{ }
}
Sin embargo, esto es válido y compilará.
public class ClassTwo : ClassOne
{
public ClassTwo(int x, string s) : base(x, s)
{ }
}
Me gustaría señalar aquí que en C# solo se puede heredar de una clase base. Lo que significa que esta puede no ser la solución correcta para una situación particular, pero es algo en lo que pensar.
Tony.
Creo que está poniendo demasiado significado a la implementación de un detalle: un constructor en .NET es en realidad un método que se llama inmediatamente después de que se crea el objeto (asignado en la memoria). No hay ninguna razón por la que no pueda definirse como comportamiento también. Por supuesto, las implementaciones también pueden declarar libremente otros constructores, del mismo modo que pueden sobrecargar un método que implemente una interfaz. Los constructores en las interfaces serían una característica poco utilizada, pero no inútil. – EMP
Creo que el objetivo de la pregunta es: ya que está construido de esta manera, ¿cuál es la mejor práctica? Entonces supongo que la respuesta es: usando clases abstractas, como dice esta respuesta: http://stackoverflow.com/a/2804067/1181162 – Vince