Có cách nào vòng này sử dụng giao diện hoặc thừa kế không?
Có.
Giao diện: tạo giao diện IEat hoặc IPet hoặc bất kỳ khái niệm nào bạn muốn đại diện. Làm cho giao diện có một phương thức Eat. Yêu cầu Cat và Dog triển khai giao diện này. Có thuộc tính Pet thuộc loại đó.
Thừa kế: Tạo lớp cơ sở trừu tượng Động vật hoặc Thú cưng hoặc bất kỳ khái niệm nào bạn muốn đại diện. Tạo một phương thức trừu tượng Ăn trên lớp cơ sở. Có Cat và Dog kế thừa từ lớp cơ sở này. Có thuộc tính Pet thuộc loại đó.
Sự khác biệt giữa hai loại này là gì?
Sử dụng giao diện để lập mô hình ý tưởng "X biết cách thực hiện Y". Ví dụ: IDisposable có nghĩa là "Tôi biết cách xử lý tài nguyên quan trọng mà tôi đang nắm giữ". Đó không phải là một thực tế về những gì đối tượng là, đó là một thực tế về những gì đối tượng không.
Sử dụng kế thừa để mô hình hóa ý tưởng "X là một loại Y". Chó là một loại động vật.
Điều về giao diện là bạn có thể có bao nhiêu trong số chúng tùy thích. Nhưng bạn chỉ có thể kế thừa trực tiếp từ một lớp cơ sở, vì vậy bạn phải đảm bảo bạn có được quyền nếu bạn định sử dụng thừa kế.Vấn đề với thừa kế là mọi người sẽ tạo ra các lớp cơ sở như "Xe" và sau đó họ nói "Quân đội là một loại Xe" và "Tàu là một loại Xe" và bây giờ bạn đang mắc kẹt: cơ sở là gì lớp Destroyer? Đó là cả Tàu và Quân đội và không thể là cả hai. Chọn "trục kế thừa" cực kỳ cẩn thận.
Có cách nào tôi có thể đặt Thú cưng là loại đối tượng nhưng vẫn truy cập vào thuộc tính của bất kỳ lớp học động vật nào được gán cho nó?
Có, trong C# 4 có, nhưng không làm như vậy. Sử dụng giao diện hoặc kế thừa.
Trong C# 4, bạn có thể sử dụng "động" để nhận được công văn động khi chạy đến phương thức Eat trên đối tượng trong Pet.
Lý do bạn không muốn làm điều này là vì điều này sẽ sụp đổ và chết khủng khiếp nếu ai đó đặt trái cây hoặc cưa tay trong tài sản thú cưng và sau đó thử làm cho nó ăn. Điểm kiểm tra thời gian biên dịch là giảm sự mong manh của chương trình. Nếu bạn có cách để thực hiện kiểm tra biên dịch nhiều lần hơn, hãy sử dụng nó.
Nguồn
2010-09-07 17:14:28
Đây có phải là bài tập về nhà không? –
Mùi như bài tập về nhà với tôi. Không có gì sai với các câu hỏi về bài tập về nhà, nhưng chúng phải được gắn cờ như vậy. Thêm thẻ "bài tập về nhà" vào câu hỏi của bạn nếu đó là bài tập về nhà có liên quan. –
Tôi không thích người này.Pet.Eat(), đọc sai cách tôi có thể sợ những gì người đó sẽ làm cho vật nuôi .. Làm thế nào về Person.FeedPet() để thay thế. Vì lợi ích của động vật .. –