Điều đó có nghĩa là gì khi bạn thêm từ khóa tĩnh vào một phương thức?
public static void doSomething(){
//Well, do something!
}
Bạn có thể thêm static
từ khóa vào lớp không? Điều đó có nghĩa là gì?
Điều đó có nghĩa là gì khi bạn thêm từ khóa tĩnh vào một phương thức?
public static void doSomething(){
//Well, do something!
}
Bạn có thể thêm static
từ khóa vào lớp không? Điều đó có nghĩa là gì?
Câu trả lời:
Một static
hàm, không giống như một hàm ( thể hiện ) thông thường , không được liên kết với một thể hiện của lớp.
Một static
lớp là một lớp chỉ có thể chứa static
các thành viên, và do đó không thể được khởi tạo.
Ví dụ:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
Để gọi InstanceMethod
, bạn cần một thể hiện của lớp:
SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
Từ quan điểm khác: Hãy xem xét rằng bạn muốn thực hiện một số thay đổi trên một Chuỗi. ví dụ bạn muốn tạo các chữ cái Uppercase, v.v. bạn tạo một lớp khác có tên "Công cụ" cho những hành động này. không có ý nghĩa tạo ra thể hiện của lớp "Công cụ" vì không có bất kỳ loại thực thể nào có sẵn trong lớp đó (so sánh với lớp "Người" hoặc "Giáo viên"). Vì vậy, chúng tôi sử dụng từ khóa tĩnh để sử dụng lớp "Công cụ" mà không cần thực hiện bất kỳ trường hợp nào và khi bạn nhấn dấu chấm sau tên lớp ("Công cụ"), bạn có thể có quyền truy cập vào các phương thức bạn muốn.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
Một phương thức tĩnh, trường, thuộc tính hoặc sự kiện có thể gọi được trên một lớp ngay cả khi không có phiên bản nào của lớp được tạo. Nếu bất kỳ phiên bản nào của lớp được tạo, chúng không thể được sử dụng để truy cập thành viên tĩnh. Chỉ có một bản sao của các trường và sự kiện tĩnh tồn tại và các phương thức và thuộc tính tĩnh chỉ có thể truy cập các trường tĩnh và các sự kiện tĩnh. Các thành viên tĩnh thường được sử dụng để biểu diễn dữ liệu hoặc tính toán không thay đổi để đáp ứng với trạng thái đối tượng; chẳng hạn, một thư viện toán học có thể chứa các phương thức tĩnh để tính sin và cos. Các thành viên lớp tĩnh được khai báo bằng từ khóa tĩnh trước kiểu trả về của membe
Một thời gian ngắn, bạn không thể khởi tạo lớp tĩnh: Ex:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
Bạn không thể làm như thế này:
myStaticClass msc = new myStaticClass(); // it will cause an error
Bạn chỉ có thể thực hiện:
myStaticClass.someFunction();
Từ khóa tĩnh, khi được áp dụng cho một lớp, sẽ cho trình biên dịch tạo một thể hiện duy nhất của lớp đó. Sau đó, không thể 'mới' một hoặc nhiều thể hiện của lớp. Tất cả các phương thức trong một lớp tĩnh phải được khai báo là tĩnh.
Có thể, và thường mong muốn, có các phương thức tĩnh của một lớp không tĩnh. Ví dụ, một phương thức xuất xưởng khi tạo một thể hiện của một lớp khác thường được khai báo là tĩnh vì điều này có nghĩa là một thể hiện cụ thể của lớp có chứa phương thức nhân tố là không bắt buộc.
Để được giải thích tốt về cách thức, thời gian và địa điểm, xem MSDN
static
lớp không có ví dụ nào cả.