2016-02-25 16 views
6

Điều này tạo ra lỗi khi tôi không thể chuyển đổi loại ClassType thành T. Có cách giải quyết nào cho vấn đề này không?Đối tượng truyền đến phương thức chung loại

Có cách nào để chỉ định rằng loại thiscó thể trên thực tế được chuyển đổi thành T không?

giải pháp
public void WorkWith<T>(Action<T> method) 
{ 
    method.Invoke((T)this); 
} 

Trả lời

3

Hai càng tốt:

Không an toàn kiểu:

public void WorkWith<T>(Action<T> method) 
{ 
    method.Invoke((T)(object)this); 
} 

này không an toàn kiểu vì bạn có thể vượt qua nó bất kỳ phương pháp mà có một tham số duy nhất và không trở lại giá trị, như:

WorkWith((string x) => Console.WriteLine(x)); 

Các typesafe "phiên bản" (sử dụng chế generic):

public class MyClass 
{ 
    public void WorkWith<T>(Action<T> method) where T : MyClass 
    { 
     method.Invoke((T)this); 
    } 
} 

Vấn đề ở đây là để có thể đúc this để T, trình biên dịch muốn chắc chắn rằng this luôn là bột nhôm để T (vì vậy cần cho ràng buộc). Như được minh họa trong ví dụ không an toàn loại, giải pháp "cổ điển" (không an toàn) được sử dụng với generics là truyền qua một dàn diễn viên đến object.

+0

Mặc dù người dùng dưới đây có thể đã có câu trả lời sai, nó là mơ hồ vì vậy tôi chỉnh sửa nó và chấp nhận. Câu trả lời này cũng rất tốt vì nó không mơ hồ và cho thấy kết quả trong ngữ cảnh với một lời giải thích. Tôi muốn chấp nhận cả hai nhưng cũng tốt. – KthProg

+0

upvoted và xứng đáng được chấp nhận câu trả lời so với câu trả lời ban đầu là sai và không chứa lời giải thích ... –

+0

@ Selman22 Tôi cảm thấy xấu cho poster gốc nhưng tôi phải đồng ý. Đã thay đổi. – KthProg

3
public void WorkWith<T>(Action<T> method) where T: ClassType { 
    method.Invoke((T)this); 
} 
+0

Cảm ơn! Tôi đã không chắc chắn làm thế nào để hạn chế các loại mẫu cho các phương pháp! – KthProg

+0

bạn được chào đón –

+0

Trong khi bạn đang ở đây, bất kỳ ý tưởng làm thế nào để xác định nhiều lớp có thể xuất phát từ 'lớp'? Nhiều lớp được liệt kê sau khi 'where T:' dường như phá vỡ nó. – KthProg

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