Spero che qualcuno qui possa spiegare quali supposizioni errate sto facendo. In C# 4.0, ho 2 interfacce e una classe che li implementa entrambi. In un metodo dichiaro una variabile con il tipo della prima interfaccia, un'istanza utilizzando la classe che implementa entrambe le interfacce e può in qualche modo lanciare con successo per la seconda interfaccia come nel codice seguente:Trasmissione di un'interfaccia a un'altra interfaccia che non eredita
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();
}
}
Sono cercando di capire perché il casting ha avuto successo. Sì, la classe implementa entrambe le interfacce, ma penserei che dal momento che la prima variabile sia dichiarata come IFirstInterface (che non eredita da ISecondInterface), il cast dovrebbe ancora fallire.
Ho anche provato a ristrutturare il mio codice in altri modi, come non usare 'come', ma il cast ha ancora successo.
Cosa mi manca?
Ciò conferma quello che pensavo stesse succedendo. Grazie –
Molte molte grazie, davvero necessarie. +1 (+10 se potessi). – Arjang