Digamos que tengo una clase (ClassA
) que contiene un método que llama al constructor de otra clase, de esta manera:¿Por qué estoy obligado a hacer referencia a los tipos en los constructores no utilizados?
public class ClassA
{
public void CallClassBConstructor()
{
using(ClassB myB = new ClassB()) {...}
}
}
La clase ClassB
se parece a esto:
public class ClassB : IDisposable
{
public ClassB(){}
public ClassB(string myString){}
public ClassB(ClassC myC){}
public void Dispose() {...}
}
... y ClassC
es aún más sencilla:
public class ClassC{}
Si pongo estas clases en su propio culo embly y compila toda la solución no obtengo ningún error. Pero si se sustituye la instrucción using con esto:
using(ClassB myB = new ClassB("mystring")){...}
me sale un error de compilación que me pide que agregar una referencia a [mynamespace].ClassC
en ClassA
. Ya que no estoy llamando al ClassB(ClassC myC)
en absoluto, esto no tiene sentido para mí, ¿por qué tengo que incluir los tipos de otros constructores independientemente de si los uso o no? ¿Qué pasa si ClassC
se incluyó en una asamblea con licencia o difícil de adquirir? ¿Es este un ejemplo de mal diseño que los desarrolladores deberían evitar o me falta algo aquí?
Esto no puede compilar en primer lugar, ClassB no implementa IDisposable. Entonces no puede usarse en una cláusula de uso. –
Esto no es C/C++ donde el código inválido no utilizado se ignorará silenciosamente si el engarce lo hace gc'd. – leppie
He editado el código para que compile ahora –