Partial Method

Partial method là cách định nghĩa phương thức và cài đặt phương thức ở 2 nơi khác nhau.

Partial methods cho phép người thiết kế định nghĩa các phương thức và để lại phần cài đặt cho các lập trình viên có thể cài đặt hoặc không cài đặt partial method đó. Nếu lập trình viên không cài đặt các partial methods thì khi biên dịch, compiler sẽ remove partial method đó đi. Dưới đây là các điều kiện bắt buộc phải tuân theo khi sử dụng partial methods:

  • Signatuares trong tất cả các khai báo phải giống nhau
  • Kiểu trả về luôn là void
  • Không cho phép sử dụng access modifiers (Partial method luôn ngầm định private)

Ví dụ dưới đây minh họa định nghĩa partial method trong partial class

namespace PM
{
 partial class A
 {
 partial void OnSomethingHappened(string s);
 }
 // This part can be in a separate file.
 partial class A
 {
 // Comment out this method and the program
 // will still compile.
 partial void OnSomethingHappened(String s)
 {
 Console.WriteLine("Something happened: {0}", s);
 }
 }
}
Advertisements

Extension methods

Extension methods cho phép bạn thêm các phương thức vào các kiểu dữ liệu hiện có mà không cần tạo một kiểu dẫn xuất mới, biên dịch lại hoặc sửa đổi kiểu gốc.

Extension methods khai báo static, nhưng chúng được gọi như instance methods

Extension method là phương thức static của lớp static, từ khóa this áp dụng cho tham số đầu tiên của  phương thức. Kiểu của tham số đầu sẽ được mở rộng phương thức đó.

public static class ExtensionMethodDemo
{
    public static string UppercaseFirstLetter(this string value)
    {
        // Uppercase the first letter in the string.
        if (value.Length > 0)
        {
            char[] array = value.ToCharArray();
            array[0] = char.ToUpper(array[0]);
            return new string(array);
        }
        return value;
    }
}

class Program
{
    static void Main()
    {
        // Use the string extension method on this value.
        string value = "hello world!";
        value = value.UppercaseFirstLetter();
        Console.WriteLine(value);
    }
}