Да, поскольку ссылка на объект через интерфейс по-прежнему является ссылкой на этот объект.
Приведение объекта к интерфейсу не создает новый объект, оно просто изменяет «портал», через который вы общаетесь с объектом.
Вы можете легко проверить это в LINQPad :
void Main()
{
A a = (A)new B();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.KeepAlive(a);
Debug.WriteLine("Got here");
}
public interface A
{
}
public class B : A
{
~B()
{
Debug.WriteLine("B was finalized");
}
}
При выполнении вы получите:
попал сюда
А затем, необязательно:
B был завершен
Но обратите внимание, что B пережил полный цикл GC, хотя у вас была ссылка на него через A.