2013-08-12 28 views
5

Kiểm tra mã dưới đây:Tại sao tôi nên sử dụng toán tử ngầm/rõ ràng?

class Money 
{ 
    public Money(decimal amount) 
    { 
     Amount = amount; 
    } 

    public decimal Amount { get; set; } 

    public static implicit operator decimal(Money money) 
    { 
     return money.Amount; 
    } 

    public static explicit operator int(Money money) 
    { 
     return (int)money.Amount; 
    } 
} 

Tôi không hiểu làm thế nào nó sẽ có ích trong mã của tôi, couldnt tôi chỉ làm một phương pháp như:

public static int returnIntValueFrom(Money money) 
{ 
    return (int)money.Amount; 
} 

Nó sẽ không được dễ dàng hơn và rõ ràng hơn để thực hiện ?

+5

Bạn nghĩ gì cho phép bạn viết những thứ như 'return (int) money.Amount;' trong mã của bạn? – mbeckish

+0

Thats một mẫu được tìm thấy trên một bộ đào tạo Microsfot, (thi Ref 70-483 Lập trình trong C#, Wouter de Kort, O´Reilly, 2013 (Trang 2 CH 2ƠNG 2 Tạo và sử dụng các loại)) –

+0

@WilnerAvila - Khi bạn đến 20 danh tiếng, bạn luôn có thể hỏi những loại câu hỏi "Tôi không hiểu" trong [C# phòng chat] (http://chat.stackoverflow.com/rooms/7/c). Đó là một định dạng tốt hơn để giải thích nhanh hơn SO. –

Trả lời

5

Điều này được thực hiện để cho phép tiền được thêm vào tiền khác. Mà không có đoạn mã, điều này sẽ gây ra một lỗi biên dịch, "điều hành '+' không thể được áp dụng cho toán hạng kiểu 'tiền' và 'int'"

Money money = new Money(5.35m); 
decimal net = money + 6; 

Với các nhà điều hành đúc hiện nay nó cho phép các loại chuyển đổi được thực hiện mà không cần ném ngoại lệ. Nó có thể hỗ trợ khả năng đọc và cho phép đa hình, trong đó các loại tiền tệ khác nhau có thể thực hiện các loại phôi riêng của chúng.

+0

Trong khi điểm chính của bạn là chính xác, nó sẽ không thực sự ném một ngoại lệ, trừ khi đó là cách bạn tham khảo các lỗi biên dịch-thời gian. –

+0

@ 500-InternalServerError - Bạn đã đúng, đó là lỗi thời gian biên dịch và tôi sẽ chỉnh sửa câu trả lời của mình. –

+0

Điều này thật tuyệt vời, tôi không bao giờ biết toán tử đúc ngầm cho phép bạn làm điều này. – McGarnagle

Các vấn đề liên quan