2009-03-28 41 views
7

Trong Java biến Ví dụ có thể được khởi tạo bởi một khối khởi tạo như hình dưới đây:C# tương đương với Java dụ initializer

class Example { 
    private int varOne; 
    private int varTwo; 

    { 
     // Instance Initializer 
     varOne = 42; 
     varTwo = 256; 
    } 
} 

Có một cấu trúc tương đương trong C#?

[Chỉnh sửa] Tôi biết rằng điều này có thể là nội tuyến với khai báo biến cá thể. Tuy nhiên, tôi đang tìm kiếm là một cái gì đó tương tự như các nhà xây dựng tĩnh trong C# nhưng cho các biến dụ.

+0

Điểm của người đi bộ: khối khởi tạo mẫu và khởi tạo trường mẫu được thực thi bởi hàm tạo ngay lập tức * sau * gọi super. –

+0

@Tom - Bạn nói đúng về lệnh gọi. Nhận xét mã nguồn bị xóa. – maxyfc

+0

Tại sao không chỉ làm cho nó một phương pháp và gọi nó từ các nhà xây dựng, nếu đó là những gì xảy ra đằng sau hiện trường không? – toxvaerd

Trả lời

5

Thực sự không tương đương với C#. C# chỉ có 2 cách để khởi dụ varibles

  1. Trong constructor
  2. Bằng cách khởi tạo một cách rõ ràng biến vào nó của điểm khai

Không có cách nào để làm một khởi sau khi đối tượng được tạo ra nhưng trước khi hàm tạo chạy.

7

Tạo một constructor dụ rằng bất kỳ nhà xây dựng địa phương khác sẽ gọi trong danh sách khởi tạo:

private Example() 
{ 
    //initialize all fields here 
} 

public Example (/*list of parameters*/) : this() 
{ 
    //do specific work here 
} 

Nếu constructor mặc định đã được yêu cầu của logic của ứng dụng, sau đó susbstitute

private Example() 

với

private Example (object dummy) 

và, tất nhiên, phù hợp sửa đổi cuộc gọi bắt đầu.

+0

không may là không cho phép bạn có nhiều khối khởi tạo thể hiện ... nhưng đối với trường hợp thông thường sẽ là hợp lý. – TofuBeer

+0

Tò mò - TofuBeer là gì? và cũng có thể, tại sao bạn muốn nhiều khối khởi tạo thể hiện? Đối với sau này - có vẻ như nó sẽ dẫn đến sự nhầm lẫn với các khối nằm rải rác khắp mã lớp, tách biệt với các hàm tạo và tách biệt với các thành viên khai báo. – Cheeso

+0

một ví dụ concrerte - có một trường riêng chỉ đọc tôi cần khởi tạo dựa trên một số phương thức lớp không có sẵn khi khởi tạo tĩnh. –

0

Nếu đây là những gì bạn muốn cho trường hợp cụ thể thì mức độ mà nó có thể là như sau:

class Example { 
    public int varOne; 
    public int varTwo; 

    public Example(){ 
     Console.WriteLine("varOne : " + varOne + ", varTwo : " + varTwo); 
    } 

    public void getValues() 
    { 
     Console.WriteLine("varOne : " + varOne + ", varTwo : " + varTwo); 
    } 
} 

static void Main(string[] args) 
    { 
     Example e = new Example{ varOne = 42, varTwo = 256}; 
     e.getValues(); 
    } 

Ở đây, sau đó là một hạn chế mà bạn sẽ yêu cầu các biến dụ được công khai.

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