Thời gian nhất mà bạn có kế thừa của System.Array
đang sử dụng một mảng không gian duy nhất. như:
int[] a1 = new int[2];
Khi bạn xác định int[]
này mặc nhiên có nguồn gốc từ System.Array
loại như @Sergey Rybalkin nói. Trong trường hợp này, phương thức IndexOf
chắc chắn sẽ được thực hiện tốt nhất như một phương thức thể hiện chứ không phải là phương thức tĩnh.
Nhưng có một loại khác được kế thừa từ System.Array như mảng nhiều chiều. Trong trường hợp này (đa chiều), phương thức IndexOf
không có ý nghĩa.
thử nghiệm này:
int[,] arr = new int[2, 2];
arr[0, 0] = 3; arr[1, 0] = 4;
arr[0, 1] = 5; arr[1, 1] = 6;
Array.IndexOf(arr, 4);
cuối cùng giống như ném một RankException với thông điệp "Only single dimension arrays are supported here."
Có lẽ, và có lẽ hầu hết, vì lý do đó phương pháp này được thực hiện như tĩnh.
...
Về nhận xét Is there a main principle behind the decision, whether to make a method static or not?
Có, và nguyên tắc là khá đơn giản. Phương thức instance thể hiện một hành động hoặc hành vi của một đối tượng. Phương thức tĩnh là một hàm của hệ thống có liên quan đến logic với lớp, hoặc trong một số trường hợp một phương thức mà bạn muốn gọi mà không cần tạo một cá thể của lớp.
Hãy suy nghĩ trong các lớp System.Math
làm thế nào lộn xộn sẽ là nếu bạn cần toán học mỗi khi bạn muốn gọi một phương thức như Sqrt
hoặc Pow
?
Ví dụ cuối cùng tôi sẽ cung cấp cho bạn là lớp System.Text.RegularExpressions.Regex
. Lớp này có phương thức Match
được triển khai dưới dạng ví dụ và quá tải được thực hiện dưới dạng tĩnh.
Mỗi loại được sử dụng trong ngữ cảnh khác nhau. Ví dụ được sử dụng khi bạn sử dụng cùng một mẫu nhiều lần. Tĩnh khi bạn sử dụng mẫu một thời gian duy nhất trong mã của bạn.
(Tôi đã xóa thẻ ASP.NET, vì thiết kế của 'Array' không liên quan đến ASP.NET) –
Tôi sẽ quy định hầu hết trong số chúng là tĩnh vì chúng chỉ dành cho mảng và phương pháp mở rộng phát minh vào thời điểm đó. – Romoku
@Romoku chúng vẫn có thể là các phương pháp thể hiện, mặc dù –