2009-06-18 30 views

Trả lời

33

Cuộc gọi cơ sở luôn luôn là được thực hiện trước, nhưng bạn có thể làm cho nó gọi là phương pháp tĩnh. Ví dụ: "Xin chào Foo"

public Constructor(string x) : base(Foo(x)) 
{ 
    // stuff 
} 

private static string Foo(string y) 
{ 
    return y + "Foo!"; 
} 

Bây giờ nếu bạn gọi

new Constructor("Hello "); 

sau đó các nhà xây dựng cơ sở sẽ được gọi với.

Lưu ý rằng bạn không thể phương pháp gọi cuộc gọi trên cá thể đang được tạo, vì chưa được "sẵn sàng".

+0

Tôi muốn chuyển chuỗi dài của văn bản đến hàm tạo cơ bản, vì vậy bạn đang sử dụng cách tiếp cận tốt nhất cho điều này? tức là gọi phương thức Foo tĩnh sẽ trả về chuỗi văn bản dài và gọi hàm tạo cơ sở với hàm đó. – raklos

+0

Bạn chắc chắn có thể làm - bạn có thực sự cần hàm tạo của bạn để lấy một tham số trong trường hợp đó không? Bạn sẽ vượt qua cùng một chuỗi lên đến constructor cơ sở trong mọi trường hợp? –

+0

Không có nhà xây dựng của tôi sẽ không cần nó trong trường hợp đó. Đối với mỗi lớp mới có nguồn gốc từ lớp cơ sở, nó sẽ có một "chuỗi văn bản dài" khác nhau, cần thiết bởi hàm tạo cơ sở – raklos

4

Không, base gọi chúng tôi được thực hiện trước khi thực hiện cơ thể constructor:

//pseudocode (invalid C#): 
public Constructor(string x) { 
    base(x); 
    x = "blah"; 
} 
1

Không, các nhà xây dựng cơ sở luôn gọi trước khi các nhà xây dựng hiện hành.

0

Không, nó sẽ gọi nó với giá trị được chuyển vào hàm tạo lớp dẫn xuất. Hàm tạo lớp cơ sở luôn được gọi (rõ ràng hoặc ngầm) trước khi thực hiện phần thân của hàm tạo lớp dẫn xuất.

0

Không, không. Hàm khởi tạo cơ sở sẽ được truyền chuỗi trong x trước khi thực hiện hàm tạo DerivedClass. Điều này có thể làm việc:

public DerivedClass(string x) : base("Blah") 
{ } 

Tôi không chắc chắn về điều đó nhưng bạn sẽ có thể gọi bất kỳ phương pháp/getter khi gọi các nhà xây dựng cơ sở, như vậy:

public DerivedClass(DateTime x) : base(DateTime.Now) 
{ } 
+3

Không * bất kỳ phương pháp nào * - chỉ các phương thức tĩnh. –

+0

'DateTime.Now' là một tài sản nên bạn nên loại bỏ các parens nhưng yeah, nó có thể làm điều đó. –

+0

@Jon: ... hoặc các phương thức thể hiện của các đối tượng khác. –

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