Espero que alguien aquí me explique las suposiciones incorrectas que estoy haciendo. En C# 4.0, tengo 2 interfaces y una clase que implementa ambas. En un método declaro una variable con el tipo de la primera interfaz, instanciarlo utilizando la clase que implementa las interfaces y de alguna manera puede lanzar con éxito a la segunda interfaz como en el siguiente código:Lanzando una interfaz a otra interfaz que no hereda
public interface IFirstInterface
{
void Method1();
}
public interface ISecondInterface
{
void Method2();
}
public class InterfaceImplementation : IFirstInterface, ISecondInterface
{
public void Method1() { }
public void Method2() { }
}
public class SomeClass
{
public void SomeMethod()
{
IFirstInterface first = new InterfaceImplementation();
first.Method1();
// Shouldn't the next line return null?
ISecondInterface second = first as ISecondInterface;
// second is not null and the call to Method2() works fine
second.Method2();
}
}
estoy tratando de entender por qué el casting es exitoso. Sí, la clase implementa ambas interfaces, pero creo que dado que la primera variable se declara como IFirstInterface (que no hereda de ISecondInterface), la conversión todavía no se ha realizado.
También he intentado reestructurar mi código de otras maneras, como no usar 'como', pero el lanzamiento sigue siendo exitoso.
¿Qué me estoy perdiendo?
Esto confirma lo que pensé que estaba pasando. Gracias –
Muchas gracias, realmente lo necesitaba. +1 (+10 si pudiera). – Arjang