2008-11-18 34 views
16

Khi chúng ta nói về thế giới .NET, CLR là những gì chúng ta làm phụ thuộc vào. Kiến thức tối thiểu của CLR là một lập trình viên .NET phải là một lập trình viên tốt? Bạn có thể cho tôi một/nhiều bạn nghĩ là/là đối tượng quan trọng nhất: GC ?, AppDomain ?, Threads ?, Processes ?, Assemblies/Fusion?Kiến thức tối thiểu của CLR là một lập trình viên .NET phải là một lập trình viên tốt?

Tôi sẽ đánh giá rất cao nếu bạn đăng liên kết tới các bài viết, blog, sách hoặc chủ đề khác có thể tìm thêm thông tin.

Cập nhật: Tôi nhận thấy từ một số nhận xét rằng câu hỏi của tôi không rõ ràng đối với một số người. Khi tôi nói CLR tôi không có nghĩa là .Net Framework. Nó không phải là về việc ghi nhớ các thư viện .NET, nó là để hiểu cách môi trường thực thi (trong đó các thư viện đó hoạt động trong thời gian chạy) hoạt động như thế nào.

Câu hỏi của tôi được trực tiếp lấy cảm hứng từ John Robbins tác giả của cuốn sách "Gỡ lỗi ứng dụng cho Microsoft® .NET" (mà tôi khuyên dùng) và đồng nghiệp ở đây trích dẫn Jeffrey Richter tại Wintellect. Trong một trong những chương giới thiệu, ông nói rằng "... bất kỳ lập trình viên NET nên biết những gì đang thăm dò và làm thế nào lắp ráp được nạp vào thời gian chạy". Bạn có nghĩ rằng có những thứ khác như vậy?

Cập nhật lần cuối: Sau khi đọc 5 chương đầu tiên của "CLR via C#", tôi phải nói với bất kỳ ai đọc điều này. Nếu bạn chưa từng đọc, hãy đọc cuốn sách này!

Trả lời

31

Hầu hết đó là những cách sâu sắc hơn so với loại điều nhiều nhà phát triển rơi xuống trên theo kinh nghiệm của tôi. Hầu hết các khía cạnh hiểu lầm (và quan trọng) trong kinh nghiệm của tôi:

  • Giá trị các loại vs loại tài liệu tham khảo
  • Biến vs đối tượng
  • đèo bởi ref vs đi qua giá trị
  • Các đại biểu và các sự kiện
  • Phân biệt giữa ngôn ngữ , thời gian chạy và khung
  • Đấm bốc
  • Bộ sưu tập rác

Trên "biến vs đối tượng" phía trước, đây là ba tuyên bố về mã

string x = "hello"; 
  • (Rất xấu) x là một chuỗi với 5 chữ
  • (Hơi tốt hơn) x là một tham chiếu đến một chuỗi có 5 chữ cái
  • (đúng) Giá trị của x là tham chiếu đến một chuỗi có 5 chữ cái

Rõ ràng là hai người đầu tiên được tán thành trong cuộc trò chuyện "bình thường", nhưng chỉ khi mọi người tham gia hiểu được tình hình thực tế.

+0

cộng với Xử lý ngoại lệ và thu gom rác thải –

+6

Quyền anh? Do .Net phát triển thực sự có được chọn trên đó nhiều? :) – EBGreen

+0

Xử lý ngoại lệ là một trường hợp thiết kế tốt hơn là hiểu biết cơ bản về những ngoại lệ, theo kinh nghiệm của tôi. Nhưng có, tôi sẽ thêm GC vào danh sách. –

4

Cập nhật: đọc phần có liên quan của CLR cuốn sách thông qua C# bởi Jeffrey Richter..this cuốn sách có thể là một tài liệu tham khảo tốt ..

+0

Tôi thậm chí không nghe nói về cuốn sách đó, nhưng tôi đã làm rất nhiều công việc với CLR và có thể cho bạn biết tất cả về appdomains/assembly/etc/etc. Tôi bằng cách nào đó ít có đủ điều kiện để không đọc một cuốn sách đơn lẻ? –

+0

tôi không có ý đó. tôi đọc nó khá muộn. chỉ là nó là một nơi hợp nhất tốt cho rất nhiều công cụ liên quan đến clr. sẽ chỉnh sửa bài đăng của tôi. –

+0

đã đồng ý .. những người khác nhau có những con đường khác nhau để đạt được kiến ​​thức. –

0

Câu trả lời của Jon rất tốt. Đó là tất cả các lĩnh vực khá cơ bản nhưng quan trọng mà rất nhiều nhà phát triển không hiểu rõ. Tôi nghĩ rằng sự khác biệt giữa giá trị và các loại tham chiếu liên quan đến sự hiểu biết cơ bản về cách thức GC trong.NET cư xử, nhưng, quan trọng hơn, một sự hiểu biết tốt về mô hình Vứt bỏ là quan trọng.

Phần còn lại của khu vực bạn đề cập là kiến ​​thức rất sâu về chính CLR hoặc các khái niệm nâng cao hơn chưa được sử dụng rộng rãi (chưa). [.NET 4.0 sẽ bắt đầu thay đổi một số trong đó với sự ra đời của các phần mở rộng song song và MEF.]

+0

Đồng ý rằng sự hiểu biết IDisposable là rất quan trọng. Không có upvote mặc dù vì một khuôn khổ và khái niệm ngôn ngữ. CLR không biết gì về nó .. –

+0

CLR hoàn toàn biết về IDisposable vì nó là tích phân –

1

nên biết về quản lý bộ nhớ, Các đại biểu

1

câu trả lời của Jon có vẻ là khá hoàn chỉnh với tôi (cộng với các đại biểu) nhưng tôi nghĩ những gì về cơ bản tách một lập trình tốt từ một lập trình viên trung bình là trả lời các câu hỏi tại sao chứ không phải như thế nào. Thật tuyệt khi biết cách các bộ sưu tập rác hoạt động như thế nào và các loại giá trị và loại tham chiếu hoạt động như thế nào, nhưng đó là một cấp độ hoàn toàn khác để hiểu khi nào nên sử dụng loại giá trị so với loại tham chiếu. Đó là sự khác biệt giữa việc nói trong một ngôn ngữ so với phát biểu bằng ngôn ngữ (đó là tất cả về cách chúng ta áp dụng kiến ​​thức chúng ta có và cách chúng ta đến các quyết định đó).

+1

Biết lý do tại sao lại quan trọng, nhưng cho đến khi bạn hiểu cách thức hoạt động của một thứ bạn không thể trả lời một cách đáng tin cậy tại sao bạn nên (hoặc không nên) sử dụng nó theo c onditions. –

+0

Đồng ý ... Tôi vừa bình luận rằng một cái gì đó được thực hiện như thế nào so với lý do tại sao thực sự tách biệt sự khác biệt giữa một nhà phát triển trung bình và một nhà phát triển tuyệt vời – user38734

0

Một điều có thể thực sự phức tạp để nắm bắt là trì hoãn thực thi và lượt thích.

Làm cách nào để bạn giải thích cách phương thức trả về một công trình có thể đếm được? Một đại biểu thực sự làm gì? những thứ như thế.

4

A tuyệt vời lập trình không thể được đo lường bằng số lượng những điều anh ta biết về CLR. Chắc chắn đó là một khởi đầu tốt đẹp, nhưng anh ta cũng phải biết OOP/D/A và rất nhiều thứ khác như Mẫu thiết kế, Thực tiễn tốt nhất, Khái niệm O/RM, v.v.

Thực tế là tôi muốn nói "tuyệt vời. Net lập trình viên "không cần thiết cần phải biết nhiều về CLR ở tất cả miễn là anh ấy có kiến ​​thức tuyệt vời về lý thuyết và khái niệm lập trình chung ...

Tôi thà thuê một" nhà phát triển Java tuyệt vời "với kiến ​​thức chung tuyệt vời và kinh nghiệm trong Java cho một công việc .Net sau đó là một "bậc thầy" trong. Net có ít kinh nghiệm và nghĩ O/RM là một cổ phiếu ticker và thủ tục lưu trữ là một cách tuyệt vời để "trừu tượng cơ sở dữ liệu" ...

Tôi đã xem pr giáo viên chuyên nghiệp in. Net hoàn toàn thất bại trong việc thực hiện những điều thực sự đơn giản mà không vi phạm lưng của họ do thiếu "kiến thức chung" trong khi họ cùng một lúc "biết tất cả mọi thứ" có ... Điện thoại

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