Hàm trong C# - static vs non-static

Em muốn hỏi là static ở trước funtion có nghĩa gì ạ .Có hoặc ko có static hàm vẫn hoạt động bình thường .Em đã tra google mà ko đầy đủ

Hàm static nghĩa là hàm đó không phụ thuộc vào object mà nó thuộc về Class và nó có tính chất global. Hàm static giống như một function hơn là một method thể hiện behavior của object.

Ví dụ trong thực tế có thể dùng class, và member static (hàm static, const) khi làm các hàm utility VD:

  • Hàm regex check validate email.
  • Hàm hash password dạng plain text sang MD5.
  • Hàm convert string sang number, xử lý SĐT (thêm đầu số, check length, cắt space, …).
2 Likes

Em muốn hỏi static ở trong class Program ấy ạ

Bạn lên google search :

  • static class là gì?

  • static method là gì?

  • static variable là gì?

  • Công dụng và cách phân biệt 3 cái trên.

1 Like

Bỏ qua comment đậm chất lý thuyết và thiếu tâm huyết trên.
Mình hiểu ý của bạn rằng static trong class Program và class này không được gọi ở đâu cả. Thậm chí có 1 số method static còn là private. Như vậy static dùng có mục đích gì?

  1. Khi nào dùng static (private static method): Khi bạn không sử dụng bất kỳ 1 property nào hay 1 field nào của object đó, hay không biến đổi property và field của object.
public class Class1{
  int a;
  int b;

  private int Tong() {
    int c = Cong(a,b);
    return c;
  }
  private static int Cong(int n1, int n2) {
      return n1 + n2;
  }
}
  1. Không dùng static được không. ĐƯỢC
  2. Tại sao dùng static: Khi method make static, trong runtime mỗi lần gọi method, sẽ không cần kiểm tra object null hay không null, từ đó tăng thêm performance.
  3. Tài liệu tham khảo:

Members that do not access instance data or call instance methods can be marked as static (Shared in Visual Basic). After you mark the methods as static, the compiler will emit nonvirtual call sites to these members. Emitting nonvirtual call sites will prevent a check at run time for each call that makes sure that the current object pointer is non-null. This can achieve a measurable performance gain for performance-sensitive code. In some cases, the failure to access the current object instance represents a correctness issue.

6 Likes

Static :
Thuộc về tập thể.
Có 1 cái duy nhất tập thể dùng chung.
Do có một cái duy nhất nên nó ở đâu là có sẵn và cố định (địa chỉ).
Do có sẵn và cố định nên thằng nào cũng có thể dùng mà không phải khởi tạo cái gì.

Non-static : thuộc về cá thể.
Tức là thuộc về riêng đối tượng, mỗi thằng đối tượng có 1 cái.
Do đó muốn dùng thì phải khởi tạo đối tượng trước.

Tại sao Main trong lớp Program lại là static ?
Bởi vì đặc tính yêu cầu của main là chỉ có 1 cái duy nhất không thuộc đối tượng nào.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?