C# Advanced (Series #6)

2 min read

  • C# – Anonymous Types
  • C# – Dynamic Types
  • C# – Ternary Operator ?:
  • C# Generics & Generic Constraints
  • C# – Delegates
  • C# – Func Delegate
  • C# – Action Delegate
  • C# – Anonymous Method
  • C# – Events
  • C# – Extension Method
  • C# – HttpClient

C# Func Delegate

C# bao gồm built-in generic delegate types như Func và Action, do đó, bạn không cần phải xác định custom delegates theo cách thủ công trong hầu hết các trường hợp.

Func là một generic delegate có trong System namespace. Nó có 0 hoặc nhiều tham số đầu vào và một tham số đầu ra. Tham số cuối cùng được coi là tham số out.

Func delegate nhận một tham số đầu vào và một tham số đầu ra được xác định trong System namespace như hiển thị bên dưới:

// Signature: Func
namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

Tham số cuối cùng trong dấu ngoặc nhọn <> được coi là return type và các tham số còn lại được coi là loại tham số đầu vào, như minh họa trong hình sau.

Func delegate với hai tham số đầu vào và một tham số đầu ra sẽ được biểu diễn như bên dưới.

Func delegate sau đây nhận hai tham số đầu vào thuộc loại int và trả về một giá trị thuộc loại int:

Func<int, int, int> sum;

Bạn có thể gán bất kỳ phương thức nào cho func delegate ở trên, phương thức này nhận hai tham số int và trả về một giá trị int

// Example: Func
class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        Func<int,int, int> add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}
// OUTPUT: 20

Func delegate type có thể bao gồm từ 0 đến 16 tham số đầu vào thuộc các loại khác nhau. Tuy nhiên, nó phải bao gồm một tham số out cho kết quả. Ví dụ: Func delegate sau đây không có bất kỳ tham số đầu vào nào và nó chỉ bao gồm tham số out.

// Example: Func with Zero Input Parameter
Func<int> getRandomNumber;

Func với một Anonymous Method

Bạn có thể chỉ định một phương thức ẩn danh cho Func delegate bằng cách sử dụng từ khóa delegate .

// Example: Func with Anonymous Method
Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

Func với toán tử Lambda

// Example: Func with lambda expression
Func<int> getRandomNumber = () => new Random().Next(1, 100);
//Or 
Func<int, int, int>  Sum  = (x, y) => x + y;

Những điểm cần nhớ :

  • Func is built-in delegate type.
  • Func delegate type must return a value.
  • Func delegate type can have zero to 16 input parameters.
  • Func delegate does not allow ref and out parameters.
  • Func delegate type can be used with an anonymous method or lambda expression.
Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *