Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Up-casting và Down-casting C sharp là gì?

  1. #1
    Ngày gia nhập
    03 2010
    Nơi ở
    Nha Trang
    Bài viết
    11

    Question Up-casting và Down-casting C sharp là gì?

    Các bạn nào hiểu 2 vấn đề này thì giải thích kỹ và cặn kẽ giùm mình một tý nha! Cảm ơn mọi người, mong nhận được bài trả lời sớm nhất.

  2. #2
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    Cool Upcasting và Downcasting

    Đây là 2 khái niệm dùng trong các lớp có thừa kế lẫn nhau.
    Nếu bạn đã biết về thừa kế thì mình xin giải thích như sau:

    Giả sử bạn có 1 lớp là HUMAN (con người), bạn lấy nó làm lớp cha, cho 2 lớp khác thừa kế là: STUDENT (sinh viên nghèo :P) và WORKER (công nhân).
    Lúc này bạn phải viết 3 lớp như thế này:
    Code:
    public class HUMAN
    {
         //...
    }
    
    public class STUDENT : HUMAN
    {
         //...
    }
    
    public class WORKER : HUMAN
    {
         //...
    }
    Giả dụ trong hàm Main bạn khai báo và khởi tạo một số biến thế này:
    Code:
    HUMAN h1;
    HUMAN h2 = new HUMAN("Nguyen Van To Te", 20);
    
    STUDENT s1;
    STUDENT s2 = new STUDENT("Tran Van X", "High school musical", 22);
    Upcasting là chuyển một đối tượng thuộc lớp CON thành một đối tượng lớp CHA
    Như vậy: hợp lệ sẽ là:
    Code:
    h1 = s2;
    Downcasting là chuyển ngược một đối tượng thuộc lớp CHA thành một đối tượng thuộc lớp CON
    Trường hợp này phải ép kiểu. Lý do 1 cha có thể có nhiều loại con nên phải ép về một kiểu xác định.
    Code:
    s1 = h2; // <-- không hợp lệ. Vì thiếu ép kiểu
    s1 = h1; // <-- không hợp lệ. Vì thiếu ép kiểu
    s1 = (STUDENT)h2; // <-- không hợp lệ. Vì đối tượng này nguyên thủy là HUMAN không thể ép về STUDENT
    s1 = (STUDENT)h1; // <-- hợp lệ. Vì h1 thực chất là 1 đối tượng STUDENT được upcasting
    Lưu ý rút ra từ ví dụ là: Upcasting (ép lên) trước rùi mới Downcasting (ép xuống) được. :P

  3. #3
    Ngày gia nhập
    03 2010
    Nơi ở
    Nha Trang
    Bài viết
    11

    Cảm ơn bạn. Cơ bản mình cũng đã hiểu khi đọc qua bài hướng dẫn nhiệt tình của bạn rồi. Nhưng chưa biết mục đích trong việc phải Up-Casting và Down-Casting.
    Và mình có một thắc mắc đoạn code sau:

    Công thức toán học Latex

    Mình không hiểu mấy comment giải thích của bạn cho lắm, h1 và h2 ở đây khác nhau ở chỗ nào mà h1 thì Down-Casting được còn h2 thì không trong khi đều là đối tượng thuộc lớp HUMAN. Điểm mình chưa hiểu rõ là đối tượng nguyên thủy là gì?

    Mong nhận được bài phản hồi của bạn.

  4. #4
    Ngày gia nhập
    03 2010
    Nơi ở
    Nha Trang
    Bài viết
    11

    Cảm ơn bạn. Cơ bản mình cũng đã hiểu khi đọc qua bài hướng dẫn nhiệt tình của bạn rồi. Nhưng chưa biết mục đích trong việc phải Up-Casting và Down-Casting.
    Và mình có một thắc mắc đoạn code sau:

    s1 = h2; // <-- không hợp lệ. Vì thiếu ép kiểu
    s1 = h1; // <-- không hợp lệ. Vì thiếu ép kiểu
    s1 = (STUDENT)h2; // <-- không hợp lệ. Vì đối tượng này nguyên thủy là HUMAN không thể ép về STUDENT
    s1 = (STUDENT)h1; // <-- hợp lệ. Vì h1 thực chất là 1 đối tượng STUDENT được upcasting

    Mình không hiểu mấy comment giải thích của bạn cho lắm, h1 và h2 ở đây khác nhau ở chỗ nào mà h1 thì Down-Casting được còn h2 thì không trong khi đều là đối tượng thuộc lớp HUMAN. Điểm mình chưa hiểu rõ là đối tượng nguyên thủy là gì?

    Mong nhận được bài phản hồi của bạn. (Mod xóa giùm mình bài gửi trước nha :()

  5. #5
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    Có nghĩa là đối tượng h2 là kiểu HUMAN, được khởi tạo từ hàm khởi tạo của HUMAN nên kiểu nguyên thủy (chắc là từ nguyên thủy không chính xác lắm, ý mình là cái kiểu của nó được khởi tạo ban đầu đó) sẽ là HUMAN.

    Nôm na như thế này: kiểu cha tổng quát hơn nên nó bự hơn (cho dễ hình dung thôi chứ không phải là kích thước nha :P), còn kiểu con nhỏ hơn. Mình lấy cái biến bự để chứa cái biến nhỏ thì được. Nhưng lấy cái biến nhỏ chứa cái biến bự thì không được. Còn mình lấy cái biến nhỏ đổ vô cái biến bự -> rồi đổ ngược về biến nhỏ thì OK. Là vậy đấy.
    ~Happy coding :P
    Rẹt rẹt..

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    49

    Mặc định Up-casting và Down-casting C sharp là gì?

    Mình không hiểu mấy comment giải thích của bạn cho lắm, h1 và h2 ở đây khác nhau ở chỗ nào mà h1 thì Down-Casting được còn h2 thì không trong khi đều là đối tượng thuộc lớp HUMAN. Điểm mình chưa hiểu rõ là đối tượng nguyên thủy là gì?

    Mong nhận được bài phản hồi của bạn. (Mod xóa giùm mình bài gửi trước nha :()
    gom hết code bạn ý vào thì sẽ hiểu.
    Visual C# Code:
    1. HUMAN h1;
    2. HUMAN h2 = new HUMAN("Nguyen Van To Te", 20);
    3.  
    4. STUDENT s1;
    5. STUDENT s2 = new STUDENT("Tran Van X", "High school musical", 22);
    6.  
    7. h1 = s2;
    8.  
    9. s1 = h2; // <-- không hợp lệ. Vì thiếu ép kiểu
    10. s1 = h1; // <-- không hợp lệ. Vì thiếu ép kiểu
    11. s1 = (STUDENT)h2; // <-- không hợp lệ. Vì đối tượng này nguyên thủy là HUMAN không thể ép về STUDENT
    12. s1 = (STUDENT)h1; // <-- hợp lệ. Vì h1 thực chất là 1 đối tượng STUDENT được upcasting

Các đề tài tương tự

  1. 08.66783446.).(.sửa máy giặt Sharp tại Tphcm,Dv tận nhà]]^[[ .).(.sửa máy giặt Sharp tại Tphcm,Dv tận nhà]]^[[
    Gửi bởi thanhcool20 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 17-05-2012, 11:32 AM
  2. 08.66783446.)*(.Sửa máy lạnh Sharp tại tphcm.DV tận nhà)]]^[[[ .)*(.Sửa máy lạnh Sharp tại tphcm.DV tận nhà
    Gửi bởi thanhcool20 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 17-05-2012, 10:58 AM
  3. 08.36009936.//.Trung tâm bảo hành máy lạnh Sharp tại tphcm((((@))))Trung tâm bảo hành máy lạnh Sharp tại tphcm
    Gửi bởi thanhcool20 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 17-05-2012, 09:40 AM
  4. So sánh casting và mutable. Nên sử dụng cái nào?
    Gửi bởi dieucay555 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 18-11-2008, 12:44 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn