Tôi đang cố gắng tạo một phương thức chung trong C#, sẽ gọi các phương thức khác nhau dựa trên kiểu dữ liệu đối số trong phần thân của nó và xử lý kết quả của chúng sau đó. Tôi đang cố gắng để đạt được điều này bằng cách tạo ra một phương thức wrapper chung và sau đó cung cấp một số quá tải của phương thức xử lý - bao gồm cả một quá trình chung sẽ được sử dụng nếu không có quá tải cụ thể.C#: Phương pháp chung không gọi quá tải phương thức cụ thể
Khi tôi gọi phương thức xử lý trực tiếp, phiên bản thích hợp được chọn đúng. Tuy nhiên khi tôi gọi nó từ phương thức wrapper nó luôn luôn chọn một generic, ngay cả khi có một quá tải phù hợp với kiểu dữ liệu cụ thể mà tôi đã truyền cho nó.
Có cách nào để điều chỉnh mã để làm cho mã hoạt động theo cách tôi cần không? Hay tôi phải sử dụng một cách tiếp cận khác.
Tôi cần mã tương thích với Mono 2.6.
using System;
class Program
{
static void Func<T>(T val)
{
Console.WriteLine("Generic Func");
}
static void Func(int val)
{
Console.WriteLine("Int Func");
}
static void Func(string val)
{
Console.WriteLine("String Func");
}
static void FuncWrap<T>(T val)
{
Console.Write("Wrap: ");
Func(val);
}
static void Main(string[] args)
{
Func(2);
Func("Potato");
Func(2.0);
FuncWrap(2);
FuncWrap("Potato");
FuncWrap(2.0);
Console.Read();
}
}
bạn có thể có quá tải FuncWrap mất một int và chuỗi là tốt (hoặc chỉ sử dụng các phương thức Func trực tiếp mà không cần gói). –