2011-06-22 36 views
7

Với sự ra đời của các loại dynamic và DLR trong .NET 4, bây giờ tôi có 3 lựa chọn khi tuyên bố những gì tôi gọi là "mở" các loại:động, đối tượng, Var

  • var, các loại ngầm tại địa phương để nhấn mạnh 'gì' thay vì 'làm thế nào',
  • object, bí danh cho System.Object, và
  • dynamic, vô hiệu hóa kiểm tra trình biên dịch, thêm các phương pháp/tài sản trong thời gian chạy

Trong khi có rất nhiều văn bản về những điều này, không có gì tôi đã tìm thấy đặt chúng lại với nhau, và tôi phải thú nhận, nó vẫn còn một chút mờ.

Thêm vào LINQ này, biểu thức lambda, các loại ẩn danh, phản chiếu ... và nó trở nên lung lay hơn.

Tôi muốn xem một số ví dụ, có lẽ là những lợi thế/bất lợi tương phản, giúp tôi củng cố nắm bắt các khái niệm này, cũng như giúp tôi hiểu khi nào, ở đâu và như thế nào tôi nên chọn giữa chúng.

Cảm ơn bạn!

Trả lời

5
  • Sử dụng var để giữ mã của bạn ngắn và dễ đọc hơn, hoặc khi làm việc với các loại vô danh:

    var dict = new Dictionary<int, List<string>>(); 
    
    var x = db.Person.Select(p => new { p.Name, p.Age }); 
    
  • Sử dụng dynamic khi động ràng buộc là hữu ích, hoặc yêu cầu. Hoặc khi bạn cần quyết định phương thức nào sẽ gọi dựa trên kiểu thời gian chạy của đối tượng.

  • Sử dụng object càng ít càng tốt, thích sử dụng các loại hoặc generics cụ thể.Một nơi mà nó rất hữu ích là khi bạn có đối tượng sử dụng chỉ dành riêng cho khóa:

    object m_lock = new object(); 
    
    lock (m_lock) 
    { 
        // do something 
    } 
    
+0

Đó không phải là một ví dụ về một loại vô danh (trừ khi 'Name' là tự nó là một ẩn danh loại, mà tôi không nghĩ rằng nó có thể được). –

+0

@George, vâng, đã sửa. Tôi không biết tại sao tôi lại viết theo cách đó. – svick

2

var: Tôi sử dụng nó để giữ mã ngắn:

thay vì viết:

MyFramework.MyClass.MyType myvar = new MyFramework.MyClass.MyType(); 

tôi có thể giữ nó "ngắn":

var myVar = new MyFramework.MyClass.MyType(); 
3

var là chính xác giống như viết loại đầy đủ, vì vậy hãy sử dụng khi một biến phải là một loại duy nhất. Nó thường được sử dụng với LINQ vì bạn thường sử dụng anonymous types với LINQ.

object là gốc của tất cả các lớp và vì vậy sẽ được sử dụng khi biến sẽ có nhiều trường hợp khác nhau, không liên quan/không được kế thừa hoặc khi bạn không biết thời gian biên dịch quảng cáo kiểu (ví dụ: phản chiếu). Sử dụng nó thường nên tránh nếu có thể.

dynamic là dành cho các đối tượng năng động, ở chỗ chúng có thể có các phương pháp và thuộc tính khác nhau, chúng hữu ích cho việc tương tác với COM cũng như ngôn ngữ động và ngôn ngữ cụ thể của miền.

0

Có cái nhìn về article này nó mang lại những ưu điểm và hạn chế của từ khóa động.

1

var được tĩnh gõ nên Type được biết đến lúc biên dịch và thời gian chạy (để giúp lỗi chính tả catch)

dynamic rất giống với đối tượng nhưng không giới hạn như nó sẽ là với Object phương pháp, ở đây Type là suy ra tại thời gian chạy, nó sẽ được sử dụng trong trường hợp bạn muốn đạt được một số hành vi động.

Vâng cho object nó không có bất kỳ thành viên đó mà bạn sẽ sử dụng, Generics sẽ được nhiều ưu tiên trong trường hợp này

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