2012-06-15 40 views
6

VBA (và tôi giả sử VB) có loại Biến thể mà tôi tin rằng sẽ chiếm nhiều bộ nhớ hơn, nhưng bao gồm nhiều loại dữ liệu khác nhau.Loại biến thể trong C#

Có tương đương trong C# không?

Trong một hình thức cửa sổ nói rằng tôi đã có những điều sau đây, làm thế nào tôi sẽ sửa đổi các loại z để nó chạy ok

private void uxConvertButton_Click(object sender, EventArgs e) 
    { 
     int x = 10; 

     byte j = (byte)x; 
     upDateRTB(j); 

     long q = (long)x; 
     upDateRTB(q); 

     string m = x.ToString(); 
     upDateRTB(m); 
    } 

    void upDateRTB(long z) { 
     MessageBox.Show(this,"amount; "+z); 
    } 

Trả lời

10
void upDateRTB(object z) { 
    MessageBox.Show(this, "amount; " + Convert.ToString(z)); 
} 
2

Từ khóa động hoặc các loại đối tượng có thể cung cấp cho bạn những hành vi biến thể bạn muốn nhưng:

Trong trường hợp này, tôi muốn thay đổi chức năng:

void upDateRTB(string z) { 
    MessageBox.Show(this,"amount; " + z); 
} 

Bởi vì đó là al l phương pháp cần.

+0

ok - hãy để tôi sửa đổi câu hỏi. – whytheq

+0

chỉ thay đổi tham số thành chuỗi không hoạt động - hãy thử. Tôi cần phải sửa đổi mã khác sau đó. Tôi chỉ sửa đổi đối tượng – whytheq

+0

Điều bạn cần xem xét là việc sử dụng chức năng này. Bạn có muốn nó chấp nhận bất kỳ loại nào? –

1

Nếu bạn đang nói về "biến thể" loại trong C#, hãy nhìn vào dynamic gõ .net 4.0

Nhưng để giải quyết nhiệm vụ của bạn nó sẽ là đủ để sử dụng z.ToString() trong bạn MessageBox.Show

2

"amount; "+z ngầm gọi phương thức ToString trên z. Vì vậy, bạn có thể sử dụng loại object:

void upDateRTB(object z) { 
    MessageBox.Show(this,"amount; "+z); 
} 

Bạn cũng có thể sử dụng năng động, nhưng tôi không nhìn thấy điểm:

void upDateRTB(dynamic z) { 
    MessageBox.Show(this,"amount; "+z); 
} 
+0

có 'dynamic' có chi phí cao hơn không? đó là lý do tại sao bạn chọn 'đối tượng' thay thế? – whytheq

+0

vâng, nó có. nhu cầu năng động để tìm ra loại tại thời gian chạy –

5

Một tham số đối tượng sẽ chấp nhận tất cả, nhưng nếu bạn muốn để giữ cho các biến mạnh mẽ gõ (và tránh đấm bốc trong quá trình này), bạn có thể sử dụng Generics:

void upDateRTB<T>(T z) { 
    MessageBox.Show(this,"amount; "+ Convert.ToString(z)); 
} 

các cuộc gọi phương pháp có thể duy trì một cách chính xác như nhau, vì trình biên dịch có thể giải quyết kiểu chung dựa trên tham số đã cho.

+0

Tôi là một C# newbie; cú pháp này cho 'generics':' (T z) 'không phải là thứ tôi đã gặp – whytheq

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