2012-07-11 32 views
6

Tôi có một giao diệnSử dụng giao diện chung nhiều lần trên cùng lớp

interface IInterface<E>{ 
    E Foo(); 
} 

sau đó tôi tạo ra một lớp như thế này

class Bar : IInterface<String>, IInterface<Int32> { 
} 

này thực sự hoạt động ra khá tốt, ngoại trừ tôi cần phải xác định một của hai chức năng có giao diện rõ ràng, như sau:

class Bar : IInterface<String>, IInterface<Int32> { 
    String Foo(); 
    Int32 IInterface<Int32>.Foo(); 
} 

Hạn chế là tôi phải làm một diễn viên mỗi khi tôi muốn đạt được Foo() có giao diện rõ ràng.

Thực tiễn tốt nhất khi giải quyết vấn đề này là gì?

Tôi đang làm một ứng dụng phụ thuộc rất hiệu suất, vì vậy tôi thực sự không muốn làm một triệu phôi mỗi giây. Đây có phải là thứ mà JIT sẽ tìm ra hay tôi nên lưu trữ một phiên bản được đúc của cá thể đó?

Tôi chưa thử mã cụ thể này, nhưng nó trông rất gần với những gì tôi đang làm.

+0

Đúc hầu như không có chi phí đối với các loại tài liệu tham khảo. – leppie

+0

Chương trình của tôi chứa một dàn diễn viên mỗi lần thêm/nhân thứ năm. Giả định của tôi là bổ sung/nhân là rất rẻ, chi phí đúc trở nên đáng kể. –

+0

Không tốn kém hơn so với cuộc gọi giao diện. – leppie

Trả lời

11

Bạn không có thể ghi đè bởi kiểu trả về, nhưng nếu bạn muốn tránh đúc bạn có thể biến kiểu trả về của bạn vào một tham số ra:

interface IInterface<E> { 
    void Foo(out E result); 
} 

class Bar : IInterface<string>, IInterface<int> { 
    public void Foo(out string result) { 
     result = "x"; 
    } 
    public void Foo(out int result) { 
     result = 0; 
    } 
} 

static void Main(string[] args) { 
    Bar b = new Bar(); 
    int i; 
    b.Foo(out i); 
    string s; 
    b.Foo(out s); 
} 
+0

+1 Tư duy thú vị :) – leppie

+0

@leppie: cảm ơn :) –

+0

Tôi thích cái này! –

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