2009-05-22 36 views
6

Cái gì như:Một hướng dẫn ngắn chung cho các tham số phương thức truyền qua ref hoặc theo giá trị (C#)?

  • nếu giá trị của biến sau khi cuộc gọi phương pháp này phải được trả về:
  • nếu có thể được khởi tạo trước khi gọi phương thức sử dụng ref
  • nếu không cần phải được khởi tạo trước khi sử dụng cuộc gọi ra

  • nếu giá trị của biến được sử dụng để trả lại, quyết định hoặc tính toán các giá trị khác từ cuộc gọi phương thức không sử dụng ref không ra

Tôi đã nhận đúng chưa? Hướng dẫn ngắn của bạn là gì?

Trả lời

0

Không chắc chắn nếu điều này thực sự trả lời câu hỏi của bạn, nhưng một cách sử dụng tốt đi qua một giá trị bằng cách ref (bằng cách sử dụng từ khóa out) Tôi đã tìm thấy là ...

int i = 0; 

if (int.TryParse("StringRepresentation", out i) 
{ 
    // do something with i which has taken the value of a the previous successful TryParse 
} 
4

Đối với các loại giá trị:

  • Nếu bạn chỉ muốn sử dụng giá trị chứa VÀ KHÔNG thay đổi giá trị ở vị trí ban đầu, hãy sử dụng phương thức truyền mặc định (theo giá trị)
  • Nếu bạn cần thay đổi nó trong cửa hàng ban đầu, hãy sử dụng ref. Ví dụ:

    int a = -3; 
    
    protected void EnsurePositiveValues(ref int value) 
    { 
        if (value < 0) 
         value = 0; 
    } 
    

Đối với các loại tài liệu tham khảo:

  • Nếu bạn cần chỉ cần sử dụng các ví dụ hoặc thay đổi nó sử dụng phương pháp đi qua mặc định (bằng cách tham khảo; nên được gọi là "bằng cách sao chép tài liệu tham khảo")
  • Nếu bạn cần (lại) chỉ định trong tham chiếu gốc thì hãy sử dụng ref. Ví dụ:

    User u = MembershipAPI.GetUser(312354); 
    
    protected void EnsureUser(ref User user) 
    { 
        if (user == null) 
         user = new User(); 
    } 
    
1

Bạn cũng cần phải đưa vào giá trị tài khoản và tham khảo các loại. Khi chuyển loại tham chiếu đến phương thức làm tham số, bạn chuyển con trỏ tới biến. Điều này có nghĩa là bên trong phương thức bạn có thể thay đổi biến và chúng sẽ có sẵn cho mã gọi là phương thức, tuy nhiên nếu bạn đặt nó thành null, bạn chỉ đặt con trỏ thành null và biến sẽ còn nguyên vẹn khi phương thức trả về.

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