Реализую 2 класса, следующим образом:
class A
{
public static void Deserialize( string path, ref A param )
{
if ( param == null )
throw new Exception( "param cannot be null" );
try
{
using ( FileStream fs = new FileStream( path, FileMode.Open ) )
{
XmlSerializer xs = new XmlSerializer( param.GetType() );
param = (A)xs.Deserialize( fs );
}
}
catch ( Exception )
{
param = (A)Activator.CreateInstance( param.GetType() );
}
}
// ...
}
class B : A
{
protected int val;
// ...
}
class Body
{
private static void Main()
{
A b = new B(); // Если объявить ссылку как B b = new B();, то
A.Deserialize( "file.xml", ref b ); // возникает ошибка cannot convert from 'ref B' to 'ref A'
}
}
Как быть в подобных случаях? Впринципе можно решить проблемму обходным путём с применением интерфейсов, либо с исмользованием дополнительных переменных, например:
B b = new B();
A loader = (A)b;
A.Deserialize( "file.xml", ref loader );
b = (B)loader;
Но хотелось бы получить более элегантное решение. Спасибо за внимание.