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