Tôi có phương pháp chungTôi có thể hạn chế phương thức chung cho nhiều giao diện không?
public static void DoSomething<T>()
{...}
. Bây giờ tôi muốn hạn chế mà T.
public static void DoSomething<T>() where T: IInterface1
{...}
Nhưng những gì tôi thực sự muốn được cho phép nhiều giao diện, một cái gì đó giống như
public static void DoSomething<T>() where T: IInterface1, IInterface2
{...}
Nhưng điều đó không làm việc. Trình biên dịch nói điều gì đó giống như
There's no implicit conversion from IInterface1 to IInterface2
There's no implicit conversion from IInterface2 to IInterface1
Tôi nghĩ về việc cho phép các lớp thực hiện một giao diện chung mà tôi có thể tham khảo nhưng tôi không có quyền truy cập vào các lớp học.
Tôi có khả năng cho phép nhiều Giao diện?
Cảm ơn, Tobi
Edit: Đây là những gì tôi muốn làm. Tôi đang phát triển Outlook-Add-In. Tôi sử dụng đoạn mã dưới đây khá thường xuyên.
public static object GetItemMAPIProperty<T>(AddinExpress.MAPI.ADXMAPIStoreAccessor adxmapiStoreAccessor, object outlookItem, uint property) where T: Outlook.MailItem, Outlook.JournalItem
{
AddinExpress.MAPI.MapiItem mapiItem;
mapiItem = adxmapiStoreAccessor.GetMapiItem(((T)outlookItem));
return mapiItem != null ? mapiItem.GetProperty(property) : null;
}
Phương thức GetMapiItem có đối tượng miễn là một trong các mục của Outlook (Nhật ký, Thư, Liên hệ, ...). Đó là lý do tại sao tôi đã hạn chế T. Bởi vì nó không thể được, nói, Outlook.MAPIFolder.
Không, tôi đã thay đổi phương pháp để
public static object GetItemMAPIProperty<T>(AddinExpress.MAPI.ADXMAPIStoreAccessor adxmapiStoreAccessor, T outlookItem, uint property)
{
AddinExpress.MAPI.MapiItem mapiItem;
mapiItem = adxmapiStoreAccessor.GetMapiItem(((T)outlookItem));
return mapiItem.GetProperty(property);
}
nhưng nhà phát triển (Trong trường hợp này I) có thể cung cấp cho nó bất kỳ loại vì phương pháp GetMapiItem chấp nhận một đối tượng. Tôi hy vọng điều đó đúng. Tôi không chắc chắn nếu nó làm cho ví dụ đó nhưng tôi đoán hạn chế một phương pháp chung cho nhiều loại (với OR) có thể là một ý tưởng tốt.
Bạn đang nhắm mục tiêu vào khung nào và bạn đang biên soạn với Visual Studio và phiên bản nào? Tôi có ở đây VS 2008 với NET 3.5 và các biên dịch trên chỉ tốt. Bạn có chắc chắn những gì bạn đang đưa cho chúng tôi như ví dụ là những gì bạn có. –
bởi vì theo cách đó bạn nói trình biên dịch T nên là IInterface1 và IInterface2 không hoặc –
mã mà anh ấy cung cấp, anh ấy chỉ cần nói phương thức lấy tham số kiểu IInterface1 OR IInterface2 –