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

Đề tài: Cách gọi phương thức đối tượng được khai báo dynamic dựa vào tham sô truyền vào trong C#4.0

  1. #1
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Mặc định Cách gọi phương thức đối tượng được khai báo dynamic dựa vào tham sô truyền vào trong C#4.0

    Hôm trước có bị xử lý kỷ luật vì đặt tiêu đề chung chung,hay gửi quá 2 bài.Hôm nay mới giám gửi lại bài.Em cố gắng đặt tiêu đề rõ ràng,tuy nhiên có thể chưa đủ rõ ràng lắm,tuy nhiên có thể em không cố ý,nếu vẫn chung chung thì mong admin xử lý nhẹ tay thôi,vì bản than em hiểu không rõ lắm,nên không thể hiểu vấn đề cụ thể như thế nào mà đưa câu hỏi chính xác như toán học được

    Em gặp phải vấn đề này.
    Giả sử em có 2 class là Class1 và class2.Mỗi Class em có viết 1 phương thức tương ứng là PhuongThuc1 và PhuongThuc2.
    Bây giờ em muốn viết 1 hàm,tham số nhận vào là 1 đối tượng.Khi gọi hàm,nếu truyền Class 1 thì sẽ gọi PhuongThuc1,Nếu là class2 thì gọi Class 2.
    Để đơn giản em cụ thể bằng 1 ví dụ thế này :
    Class1:
    Code:
     public int NumberOne { get; set; }
            public int NumberTwo { get; set; }
            public int Tong () {
            return NumberOne + NumberTwo ;
            }
    Class 2:
    Code:
     public int NumberOne { get; set; }
            public int NumberTwo { get; set; }
            public int Nhan () {
            return NumberOne*NumberTwo ;
            }
    Giờ em muốn viết hàm tính toán như sau:
    Code:
     public int TinhToan(dynamic Obj) { 
            
            return Obj. // gì đó chưa biết 
            }
    Mục đích là: Nếu em truyền vào đối tượng Class 1 thì hàm tính toán sẽ gọi phương thức Tong
    cụ thể sẽ chạy đoạn Obj.Tong();
    Nếu truyền Class 2 sẽ gọi : Obj.Nhan();
    Em mới tìm hiểu C# 4.0 nên không thành thạo lắm.
    Các bác cho em giải pháp,hay có thể cho em biết Dynamic trong C#4.0 có làm được điều này không.
    Vì em đang dùng cái này viết 1 hàm trong mvc,thấy gặp 1 vấn đề phải làm như thế này để đơn giản code
    Cảm ơn rất nhiều

  2. #2
    Ngày gia nhập
    05 2012
    Nơi ở
    HCM
    Bài viết
    20

    Bạn có thể thực hiện nạp chồng phương thức TinhToan như sau:

    Visual C# Code:
    1. public int TinhToan(Class1 c) {        
    2.       return c.Tong();
    3. }
    4.  
    5. public int TinhToan(Class2 c) {        
    6.       return c.Nhan();
    7. }

    Khi bạn truyền vào phương thức TinhToan một đối tượng là Class1 thì nó sẽ thực hiện tính tổng, nếu đối tượng là Class2 thì thực hiện phép nhân.

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Trích dẫn Nguyên bản được gửi bởi itexplore Xem bài viết
    Bạn có thể thực hiện nạp chồng phương thức TinhToan như sau:

    Visual C# Code:
    1. public int TinhToan(Class1 c) {        
    2.       return c.Tong();
    3. }
    4.  
    5. public int TinhToan(Class2 c) {        
    6.       return c.Nhan();
    7. }

    Khi bạn truyền vào phương thức TinhToan một đối tượng là Class1 thì nó sẽ thực hiện tính tổng, nếu đối tượng là Class2 thì thực hiện phép nhân.
    Cảm ơn bạn.Thì ra là dùng nạp chồng phương thức.Tức là phải viết lại hàm 2 lần để nạp chồng lên.
    Thế bác có cách nào dùng dynamic để viết hàm này 1 lần không.Vì ở đây là ví dụ đơn giản,còn việc code cái em cần dài dài lắm,nếu viết thế này thì code hơi rối rắm

  4. #4
    Ngày gia nhập
    05 2012
    Nơi ở
    HCM
    Bài viết
    20

    Cách thứ 2:
    Visual C# Code:
    1. public int TinhToan(Object obj)
    2. {
    3.     int kq = 0;
    4.     if (obj is Class1)
    5.     {
    6.         Class1 c1 = (Class1)obj;
    7.         kq = c1.Tong();
    8.     }
    9.     else if (obj is Class2)
    10.     {
    11.         Class2 c2 = (Class2)obj;
    12.         kq = c2.Nhan();
    13.     }
    14.  
    15.     return kq;
    16. }
    Bạn chỉ cần truyền vào tham số là đối tượng của Class1 hoặc Class2 thì method sẽ xử lí theo mong muốn. Giải thích một chút: ở đây nó sẽ kiểm tra đối tượng truyền vào (obj) có phải là một trong 2 kiểu Class1 hay Class2 không, nếu thuộc 1 trong 2 kiểu đó thì thực hiện ép kiểu và gán kết quả vào biến kq.

  5. #5
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Mặc định Cảm ơn itexplore

    cảm ơn bạn itexplore rất nhiều,nhờ giải pháp của bạn mà mình đã giải quyết ok

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định Cách gọi phương thức đối tượng được khai báo dynamic dựa vào tham sô truyền vào trong C#4.0

    Dynamic chủ yếu dùng để làm việc với các dữ liệu được trả về từ các hàm API.
    Cái bạn muốn trong trường hợp này là một hình thức của đa hình. Đáng lẽ dùng virtual method cho nó dễ điều khiển.

    Vì ý của bạn tương tự như đa hình, cho nên bạn phải dùng kết nối trễ (late binding).

    Thêm hàm này vào Class1:
    public int Tinh() { return Tong(); }
    Và thêm hàm này vào Class2:
    public int Tinh() { return Nhan(); }

    Như vậy trong hàm TinhToan:
    Visual C# Code:
    1. public int TinhToan(dynamic Obj) {
    2.        
    3. Obj.Tinh(); // lúc run time, chương trình tự động biết method của class nào để kết nối.
    4.  
    5. /* ................. */
    6.  
    7.         return Obj. // gì đó chưa biết
    8.         }

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

  1. Kỹ thuật C Truyền tham số vào hàm trong C
    Gửi bởi ghost.love trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 18-01-2015, 04:13 PM
  2. Lập trình C++ Làm sao để truyền tham số mặc định trong một phương thức
    Gửi bởi thebigbigworld 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: 20-09-2013, 11:06 PM
  3. truyền tham số con trỏ trong lập trình C
    Gửi bởi lcdoan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 16-11-2010, 04:44 PM
  4. Truyền tham số cho phương thức trong lập trình C#?
    Gửi bởi bubu333 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 07-11-2010, 10:29 PM
  5. Làm sao truyền được tham trị cho mảng ở trong hàm
    Gửi bởi dragon88hvt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 04-04-2010, 11:10 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