2012-09-06 35 views
5
class Base {} 
class ClassA : Base {} 
class ClassB : Base {} 
public static class ExtensionFunctions 
{ 
    public static bool DoSomething(this Base lhs, Base rhs) 
    { 
     return lhs.DoSomethingElse(rhs); 
    } 

    public static bool DoSomethingElse(this Base lhs, Base rhs) { return true; } 
    public static bool DoSomethingElse(this ClassA lhs, ClassA rhs) { return false; } 
    public static bool DoSomethingElse(this ClassA lhs, ClassB rhs) { return false; } 
    public static bool DoSomethingElse(this ClassB lhs, ClassA rhs) { return false; } 
    public static bool DoSomethingElse(this ClassB lhs, ClassB rhs) { return false; } 
} 

Do khối mã ở trên không thực sự làm bất cứ điều gì nhưng gọi phương thức DoSomethingElse đầu tiên, phương pháp tiếp cận thông minh chính xác là gì? phương pháp DoSomething?C# Tăng cường độ phân giải quá tải Phương thức

Có cách nào tôi có thể nhận cuộc gọi phương thức được giải quyết trong thời gian chạy hay không, tôi có phải sử dụng kiểu phân giải mã "if typeof" không?

Trả lời

4

Bạn có thể sử dụng dynamic keyword:

public static bool DoSomething(this Base lhs, Base rhs) 
{ 
    return DoSomethingElse((dynamic)lhs, (dynamic)rhs); 
} 
Các vấn đề liên quan