Supongamos que tengo el siguiente código de clase y el ejemplo desechable para ejecutarlo:C# - ¿Por qué no puedo pasar una clase declarada en una instrucción using como un tipo de referencia?
public class DisposableInt : IDisposable
{
private int? _Value;
public int? MyInt
{
get { return _Value; }
set { _Value = value; }
}
public DisposableInt(int InitialValue)
{
_Value = InitialValue;
}
public void Dispose()
{
_Value = null;
}
}
public class TestAnInt
{
private void AddOne(ref DisposableInt IntVal)
{
IntVal.MyInt++;
}
public void TestIt()
{
DisposableInt TheInt;
using (TheInt = new DisposableInt(1))
{
Console.WriteLine(String.Format("Int Value: {0}", TheInt.MyInt));
AddOne(ref TheInt);
Console.WriteLine(String.Format("Int Value + 1: {0}", TheInt.MyInt));
}
}
}
Calling new TestAnInt().TestIt()
corre muy bien. Sin embargo, si cambio de TestIt()
modo que DisposableInt
se declara en el interior de la instrucción using de este modo:
public void TestIt()
{
// DisposableInt TheInt;
using (DisposableInt TheInt = new DisposableInt(1))
{
Console.WriteLine(String.Format("Int Value: {0}", TheInt.MyInt));
AddOne(ref TheInt);
Console.WriteLine(String.Format("Int Value + 1: {0}", TheInt.MyInt));
}
}
me sale el siguiente error de compilación:
Cannot pass 'TheInt' as a ref or out argument because it is a 'using variable'
¿Por qué es esto? ¿Qué es diferente, aparte de la clase, está fuera del alcance y del recolector de basura una vez que finaliza la declaración using
?
(y sí, sé que mi ejemplo de la clase desechable está bastante tonto, sólo estoy tratando de mantener las cosas simples)
Solo un consejo: convencionalmente, las variables Java se nombran con la primera letra minúscula y camelCasadas en límites de palabras. Su variable 'TheInt' debe ser renombrada' theInt'. Ayuda a la legibilidad de tu código a otros si sigues las convenciones. –
Su código de ejemplo ni siquiera necesita ninguna referencia, ya que no está tratando de cambiar la referencia. –