2008-09-17 38 views
13

Tôi chưa bao giờ sử dụng bất kỳ một trong các Generics .NET trong công việc của mình, nhưng tôi hiểu rằng chúng khá phổ biến. Có ai có bất kỳ liên kết hay đề xuất sách nào để học chúng không? Là tiền thưởng; Tôi chỉ mơ hồ hiểu những gì NET bộ sưu tập chung chung là gì và những gì họ làm ... không ai có bất kỳ ví dụ thực tế về cách họ có thể được sử dụng để lợi thế lớn hơn so với các bộ sưu tập bình thường trong NET ?.Tài nguyên tốt nhất cho việc học tập Generics .NET?

Trả lời

5

CLR thông qua C# bởi Jeffrey Richter đi vào chiều sâu về Generics, và là một trong những nguồn tài nguyên vô giá mỗi nhà phát triển NET nên sở hữu và đọc.

1

Nếu bạn đã từng sử dụng các mẫu C++, thì các generic .Net gần như giống nhau. Họ thậm chí còn sử dụng cú pháp tương tự < T>.

Thậm chí nếu bạn không biết bất kỳ C++ nào, bạn có thể làm điều này khó hơn bạn cần, đặc biệt là đối với các bộ sưu tập. Chúng giống như bất kỳ bộ sưu tập nào khác, nhưng khi bạn tạo chúng, bạn cung cấp tên loại bên trong < <> để trình biên dịch biết được loại mục mà chúng nắm giữ.

0

C# 3.0 trong Nutshell là một cuốn sách tham khảo tuyệt vời với các ví dụ vừa đủ lớn để nắm bắt khái niệm mà không cảm thấy cồng kềnh.

-4

Phiếu bầu của tôi là- chủ yếu là bạn chỉ có thể tránh cho họ :)

Ưu điểm chính cho Generics là để tiết kiệm đúc, nếu bạn kết thúc làm đúc trong nội bộ mà không thực hiện bất kỳ ý nghĩa. Nếu bạn cố gắng xem xét vấn đề này, bạn sẽ thấy rằng hầu hết các ứng cử viên cho Generics thực sự là những bộ sưu tập/bộ mà có thể tạo ra lưu trữ riêng nội bộ cho lợi ích như vậy. Hầu hết các thành phần khác, mặt khác, đạt được ít/không có hiệu suất, và làm giảm tính linh hoạt đáng kể so với thực hiện kế thừa giao diện.

Nếu đúc làm phiền bạn rất nhiều, có lẽ thời gian để bạn có thể xem xét các ngôn ngữ động như IronPython :)

và- nếu bạn thực sự đi qua một kịch bản mà bạn nghĩ chung có ý nghĩa, gửi nó ra như một câu hỏi khác, các bộ não ở đây có thể nhìn lại và giải quyết nó theo từng trường hợp :)

Cập nhật: Kiểm tra trình biên dịch Yep là tốt đẹp, nhưng hãy kiểm tra nguồn của dự án Castle, bạn có thể thấy nhiều tình huống mà loại chung được đưa vào bởi vì bạn không thể làm việc tạo các thứ như IBusinessObject linh hoạt hơn nhiều so với BusinessObject- bởi vì bạn không thể truyền thứ gì đó kế thừa từ BusinessObject về BusinessObject và hy vọng sẽ truy cập vào một dấu chấm câu n được kế thừa. Thông thường tôi thấy mã kết thúc là BusinessObjectBase -> BusinessObject -> Lớp thực tế của bạn. Đó là lý do tại sao tôi cảm thấy không phải lúc nào cũng có lợi khi sử dụng Generics- và tôi là một trong những người đã lạm dụng việc thực hiện như vậy và cuối cùng có rất nhiều chức năng hài hước với cách gõ chung, không đẹp chút nào.

Cập nhật # 2: Boxing/Unboxing chỉ có nghĩa là yêu cầu bỏ đối tượng khi bạn sử dụng loại trừu tượng (như đối tượng) để lưu trữ giá trị và sử dụng giá trị được nhập mạnh để lưu trữ lại (yêu cầu truyền), chứ không phải nhiều sự khác biệt tôi có thể thấy ngoài tình hình bộ sưu tập tôi đã nói. VÀ mã như thế này vẫn làm quyền anh:

public T GetValue<T>() { 
    return (T) ...; 
} 

Đó là sự lạm dụng chung tôi đã thấy thường xuyên nhất. Mọi người nghĩ rằng họ đang đối phó với loại bản địa ở đây, trên thực tế họ không. Thay vào đó, họ chỉ làm cho việc đúc thành cú pháp chung.Điều thực sự có ý nghĩa là:

public class MyList<T> 
{ 
    private List<T> _list; 
... 
public T GetValue(int index) 
{ 
    return _list[index]; 
} 

Sau đó, quay trở lại bộ nhớ của chúng tôi. Đó là lý do tại sao tôi nói sau khi lưu trữ bộ sưu tập tôi không thấy nhiều cơ hội giúp chung. giới thiệu từ hướng dẫn này: http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

+1

Bạn có thể làm nhiều hơn là chỉ các bộ sưu tập. Và bạn không được nghe nói về 'đấm bốc'. Ngoài ra còn có nhiều điều hơn để đạt được từ việc tránh truyền hơn là chỉ có hiệu suất. An toàn loại thực thi trình biên dịch thực sự tốt đẹp. –

0

tôi thấy Generics Professional .NET 2.0 Wrox của rất hữu ích vì nó có chứa rất nhiều ví dụ thế giới thực. Generics có thể gây nhầm lẫn cho người mới bắt đầu nhưng họ có thể là một công cụ rất hữu ích/mạnh mẽ/tiết kiệm thời gian trong tay của một nhà phát triển có kinh nghiệm. Cá nhân, tôi thấy .NET Generics hữu ích nhất trong việc đơn giản hoá việc xác định và sử dụng các bộ sưu tập. Ngoài ra việc sử dụng các generics có thể dẫn đến mã hiệu quả hơn vì nó có thể giảm thiểu hiệu suất hit thường liên quan đến chuyển đổi loại boxing/unboxing.

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