Tôi hy vọng một người nào đó ở đây có thể giải thích những giả định không chính xác mà tôi đang thực hiện. Trong C# 4.0, tôi có 2 giao diện và một lớp thực hiện cả hai. Trong một phương pháp Tôi tuyên bố một biến với các loại hình giao diện đầu tiên, nhanh chóng nó bằng cách sử dụng lớp mà thực hiện cả hai giao diện và bằng cách nào đó có thể đúc nó thành công đến giao diện thứ hai như trong đoạn mã sau:Truyền một giao diện đến giao diện khác mà nó không kế thừa
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();
}
}
Tôi cố gắng hiểu tại sao quá trình truyền thành công. Có, lớp thực hiện cả hai giao diện, nhưng tôi nghĩ rằng vì biến đầu tiên được khai báo là IFirstInterface (không kế thừa từ ISecondInterface), nên việc đúc vẫn không thành công.
Tôi cũng đã cố gắng tái cơ cấu mã của mình theo các cách khác, chẳng hạn như không sử dụng 'as', nhưng dàn diễn viên vẫn thành công.
Tôi đang thiếu gì?
Điều này xác nhận những gì tôi nghĩ đã xảy ra. Cảm ơn –
Rất nhiều người cảm ơn, thực sự cần thiết này. +1 (+10 nếu tôi có thể). – Arjang