Xem ví dụ truyền đơn giản sau đây:Điều gì đó về sự thừa kế/truyền đúc mà tôi không hiểu?
int i = 1000;
object o = (object)i; // cast
i.CompareTo(1000);
o.CompareTo(1000); // error
Tôi hiểu tại sao dòng cuối cùng lại phát sinh lỗi. Không giống như int, các đối tượng không triển khai IComparable
và do đó không hiển thị phương thức CompareTo
. Sau đây cũng tạo ra một lỗi:
string s = (string)i; // cast error
Kể từ khi không có thừa kế giữa ints và chuỗi, đúc sẽ không làm việc ở đây. Bây giờ, hãy xem này:
AudioRender a = new AudioRender();
IBaseFilter b = (IBaseFilter)a; // cast
a.Run(1000); // error
b.Run(1000);
(Những lớp học đến từ DirectShowNet library.)
Tôi không hiểu điều này. Các diễn viên không tạo ra một lỗi và ném không có ngoại lệ trong thời gian chạy, vì vậy tôi giả định rằng AudioRender thực hiện IBaseFilter. Tuy nhiên, AudioRender không tiếp xúc với bất kỳ các phương pháp IBaseFilter của, chỉ ra rằng giả định của tôi ở trên là sai ...
Nếu a
cụ b
, tại sao không a
phơi bày các phương pháp b
?
Khác, nếu a
không triển khai b
, tại sao có thể a
được đúc thành b
?
Ngoài ra, tôi có thể tái tạo hành vi này mà không cần sử dụng DirectShowNet không?
Thậm chí nếu có, như thế nào mà trả lời câu hỏi? – Oded
vì nó sẽ cho phép bạn truyền sang loại khác mà không phải là loại cơ sở –
Chắc chắn, nhưng đó không phải là những gì OP đang thấy. OP đang gặp lỗi _unless_ họ truyền. Những gì bạn nói là về việc không cần phải đúc gì cả. – Oded