public object MethodName(ref float y)
{
//method
}
Làm cách nào để xác định đại biểu Func cho phương pháp này?Đại biểu Func với biến số
public object MethodName(ref float y)
{
//method
}
Làm cách nào để xác định đại biểu Func cho phương pháp này?Đại biểu Func với biến số
Nó không thể được thực hiện bằng cách Func
nhưng bạn có thể xác định một tùy chỉnh delegate
cho nó: ví dụ
public delegate object MethodNameDelegate(ref float y);
Cách sử dụng:
public object MethodWithRefFloat(ref float y)
{
return null;
}
public void MethodCallThroughDelegate()
{
MethodNameDelegate myDelegate = MethodWithRefFloat;
float y = 0;
myDelegate(ref y);
}
Trong .NET 4+ bạn cũng có thể hỗ trợ ref
loại theo cách này ...
public delegate bool MyFuncExtension<in string, MyRefType, out Boolean>(string input, ref MyRefType refType);
Không phải hồi sinh một chuỗi chết nhưng nó chắc chắn phải được lưu ý cho bất cứ ai mà đi qua này mà trong khi bạn có thể hỗ trợ một param ref với generics theo cách này, các thông số loại chung sẽ là bất biến. Các tham số kiểu generic không hỗ trợ phương sai (hiệp phương sai hoặc contravariance) cho các tham số ref hoặc out trong C#. Vẫn còn tốt nếu bạn không cần phải lo lắng về chuyển đổi loại tiềm ẩn mặc dù. –
Xin lỗi, câu trả lời này hơi lệch hướng. 'In' và' out' bạn đang hiển thị để tham số cho đại biểu liên quan đến "so sánh" và không liên quan đến những gì OP hỏi. Câu hỏi đặt ra là về các đại biểu có thể chấp nhận tham số bằng cách tham chiếu, không phải là sự nhanh nhẹn của một đại biểu (chung) liên quan đến tham số kiểu của nó. –
Lý do là: tất cả đối số loại chung phải là những thứ được chuyển đổi ertible để phản đối. "ref float" không thể chuyển đổi thành đối tượng, do đó bạn không thể sử dụng nó làm đối số kiểu chung. –
Cảm ơn điều đó, tôi đã đấu tranh để sử dụng Func vì vậy tôi biết tại sao tôi không thể sử dụng nó khi loại không thể chuyển đổi thành đối tượng – chugh97
Điều đó có nghĩa là việc nhập ủy nhiệm sẽ yêu cầu boxing/unboxing trong trường hợp này? –