2010-03-17 44 views

Trả lời

9

Chúng tương đương nhau, ngoại trừ một lớp C# chỉ có thể có một hàm tạo tĩnh (cộng với bộ khởi tạo trường tĩnh).

Ngoài ra, trong C#, một nhà xây dựng static sẽ áp dụng beforefieldinit flag.

+0

Rõ ràng Java sẽ không áp dụng bất kỳ cờ beforefieldinit nào, vì nó không được biên dịch thành MSIL. – Joren

+0

@ Joren: Tôi nhận ra điều đó. Tuy nhiên, nó là một sự khác biệt trong hành vi của hai tính năng. – SLaks

+2

Có, nhưng điểm của tôi (không rõ ràng, tôi thừa nhận) là: Có thể hữu ích hơn khi giải thích sự khác biệt về ngữ nghĩa mã (ví dụ thứ tự khởi tạo trường và hàm tạo tĩnh) so với chi tiết thực hiện. (Đặc biệt là khi các chi tiết không có ý nghĩa gì đối với một trong hai ngôn ngữ đang được xem xét.) – Joren

-2

Chúng không có.

Trong C#, các khối chỉ có thể giữ các hàm tạo. Trong java bạn có thể thực hiện các câu lệnh.

+1

Không đúng sự thật. C# static constructors có thể thực hiện các câu lệnh. – Aaron

1

Họ trông giống nhau, ví dụ sau đây cho thấy, rằng C# constructor tĩnh hoạt động giống như khối tĩnh trong java

protected Singleton() 
{ 
    Console.WriteLine("Singleton constructor"); 
} 

    private static readonly Singleton INSTANCE; 

    static Singleton() { 
     try { 
      INSTANCE = new Singleton(); 
     } 
     catch(Exception e) { 
      throw new Exception(); 
     } 
    } 
0

Có Họ là tương đương điểm khác là java không hỗ trợ constructor tĩnh nhưng hỗ trợ tĩnh block và C# hỗ trợ constructor tĩnh.

Các vấn đề liên quan