Tôi đang đọc một mã trong C# sử dụng hai hàm tạo. Một là tĩnh và một là công khai. Sự khác biệt giữa hai nhà thầu này là gì? Và đối với những gì chúng ta phải sử dụng các nhà thầu tĩnh?Công thức xây dựng công cộng và hàm tạo tĩnh
Trả lời
static
và public
là các khái niệm trực giao (nghĩa là chúng không có liên quan gì đến nhau).
public
chỉ đơn giản có nghĩa là người dùng của lớp có thể gọi hàm tạo đó (ngược với, giả sử, private
).
static
có nghĩa là phương pháp (trong trường hợp này là hàm tạo) không thuộc về một thể hiện của một lớp mà là "bản thân lớp". Cụ thể, một hàm tạo tĩnh được gọi là một lần, tự động, khi lớp được sử dụng lần đầu tiên.
Hơn nữa, một hàm tạo tĩnh không thể được thực hiện public
hoặc private
vì nó không thể được gọi thủ công; nó chỉ được gọi bởi bản thân .NET runtime - vì vậy đánh dấu nó là public
sẽ không có ý nghĩa.
Trình tạo cấu trúc tĩnh ... Nó được đảm bảo được gọi là "một lần" hỗ trợ tuổi thọ của miền ứng dụng/ứng dụng. Nó có thể chứa các câu lệnh mà bạn muốn thực thi chỉ một lần.
Công thức xây dựng ... Vì chúng ta không thể thêm các công cụ sửa đổi truy cập vào một hàm tạo tĩnh, một hàm tạo công khai có nghĩa là bạn đang nói về một hàm tạo cá thể. Nếu một constructor instance là public thì thế giới bên ngoài có thể tạo ra các instance của nó. Các tùy chọn khác là Nội bộ (có thể được gọi từ bên trong thư viện), Riêng tư (chỉ từ trong lớp).
Trình xây dựng tĩnh chạy một lần, trước khi lớp của bạn được khởi tạo. Nó được sử dụng nếu bạn muốn một cái gì đó xảy ra chỉ một lần. Một ví dụ tốt đẹp sẽ là một lớp Bus (tương tự như một cái gì đó họ giải thích trong MSDN article):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it's a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
Tôi thích nó do dòng đầu tiên rõ ràng: Đơn giản và không biến chứng! –
Static Constructor
Một constructor tuyên bố sử dụng modifier tĩnh là một constructor tĩnh. Một hàm tạo tĩnh được sử dụng để khởi tạo dữ liệu tĩnh hoặc để thực hiện một hành động cụ thể cần được thực hiện chỉ một lần trong vòng đời của lớp. Hàm khởi tạo tĩnh là khối mã đầu tiên thực hiện trong lớp. Hàm khởi tạo tĩnh thực thi một và chỉ một lần trong vòng đời của lớp. Nó được gọi tự động. Hàm tạo tĩnh không nhận bất kỳ tham số nào. Nó không có thông số truy cập. Nó không được gọi trực tiếp.
Instance hoặc Công Constructor
Instance constructor được sử dụng để khởi tạo dữ liệu ví dụ. Instance constructor được gọi mỗi khi đối tượng của lớp được tạo ra. Nó được gọi một cách rõ ràng. Instance constructor có tham số. Nó có các thông số truy cập.
Nhà xây dựng tĩnh có đảm bảo được gọi một lần không? Điều gì nếu loại không bao giờ được sử dụng trong vòng đời của một ứng dụng? – MPritchard
@MPritch, bạn đúng trong trường hợp đó, nó sẽ không được gọi. Nhưng tôi thậm chí không cần phải lo lắng về những điều mà một lớp đang làm (hoặc không làm) nếu tôi không sử dụng (hoặc giới thiệu) nó bất cứ nơi nào trong ứng dụng của tôi, nghi thức? –
rằng tất cả phụ thuộc vào những gì bạn đang làm trong hàm tạo – MPritchard