2010-04-01 31 views
22

Tôi đã nhìn thấy rất nhiều thay đổi C# 4.0 kể từ cuối năm. Tôi thực sự thích một số người trong số họ. Mặc dù vậy, tôi không muốn chuyển sang .Net 4.0 vì lý do tương thích.Có danh sách các thay đổi cho C# 4.0 hoạt động trong .Net 3.5 không?

Vì vậy, có danh sách toàn diện các tính năng ngôn ngữ C# 4.0 mới sẽ hoạt động trên .Net 3.5 trở xuống không?

Ví dụ, làm các tham số mặc định yêu cầu .NET 4.0 CLR, hoặc chúng là một tính năng trình biên dịch? Có thể sử dụng các thuộc tính tự động (một tính năng C# 3.0) và vẫn nhắm mục tiêu .NET 2.0, vì nó không yêu cầu hỗ trợ khung, nhưng không sử dụng các biểu thức LINQ, vì điều đó đòi hỏi Framework 3.5.

Xin đừng nói "tất nhiên C# 4.0 sẽ không làm việc trong Net 3.5 nguyên nhân nó cũ"

+3

Tôi không chắc có bất kỳ, như .NET 4.0 mang theo một phiên bản mới của CLR. Bạn không thể chạy. NET 4 hội đồng trong 2.0 CLR (đó là CLR NET 3.5 sử dụng). Và theo như tôi biết, trình biên dịch C# 4 không cung cấp phương tiện nhắm mục tiêu 3.5. –

+3

Ví dụ, làm các tham số mặc định yêu cầu .NET 4.0 CLR, hay chúng là một tính năng của trình biên dịch? Có thể sử dụng các thuộc tính tự động (tính năng C# 3.0) và vẫn nhắm mục tiêu .NET 2.0, vì nó không yêu cầu hỗ trợ khung, nhưng không sử dụng các biểu thức LINQ, vì _does_ đó yêu cầu Framework 3.5. –

+0

@ John, vâng, đây là những gì tôi hỏi. Tôi đã không biết rằng rất nhiều người nghĩ rằng C# là giống như .Net – Earlz

Trả lời

31

Trình biên dịch C# trong 4.0 có tính năng đa mục tiêu mới. Phiên bản ngắn gọn là nó sẽ tạo ra một assembly với bất kỳ phiên bản siêu dữ liệu nào có mặt trong tham chiếu định nghĩa System.Object (thường là mscorlib.dll). Điều này cho phép bạn sử dụng nó để biên dịch các phiên bản cho 2.0 và 3.5, cũng như các phiên bản khác nhau của Silverlight. Tính năng này được giới thiệu hỗ trợ đa mục tiêu trong Visual Studio 2010.

Do đó, bạn có thể sử dụng trình biên dịch C# 4.0 để biên dịch 3.5 hội đồng và tận dụng mọi tính năng C# 4 mà bạn muốn, miễn là không có phụ thuộc vào 4.0 thư viện. Ví dụ, đối số được đặt tên và tham số tùy chọn sẽ hoạt động tốt, bởi vì chúng không sử dụng bất kỳ tính năng khung 4.0 nào. Năng động, tuy nhiên, không, và như vậy ra khỏi hộp nó sẽ không hoạt động trên 3,5.

Có một bài đăng về điều này ở đây, bao gồm các khái niệm cơ bản.

http://blogs.msdn.com/ed_maurer/archive/2010/03/31/multi-targeting-and-the-c-and-vb-compilers.aspx

Danh sách ngắn (từ bài của Ed) là:

  • tên đối số và các thông số tùy chọn
  • cải tiến cú pháp COM nhất định (ví dụ, "bỏ qua ref")
  • generic sai

Những điều không hoạt động bao gồm động và không có pia (o ur hai outlays lớn nhất về thời gian thực hiện chúng). Trước đây yêu cầu hỗ trợ khung và sau này yêu cầu hỗ trợ thời gian chạy.

+0

Great câu trả lời, nhưng tôi đoán những gì tôi đang tìm kiếm để biết sau đó là những gì các tính năng trong C# 4.0 không dựa vào một tính năng của .Net 4.0 – Earlz

+0

Điều này là rất tốt. Một điểm quan trọng từ bài viết của Ed: phương sai chung là nếu bạn nhắm mục tiêu 3.5, 'IEnumerable 'sẽ không tham gia vào tính năng thay đổi, vì vậy bạn sẽ không thể loại bỏ tất cả các cuộc gọi' Cast 'gây phiền nhiễu cho đến khi bạn có thể nhắm mục tiêu thời gian chạy 4.0. –

+0

@Earlz - không phải là điểm của danh sách viên đạn trong câu trả lời này? –

2

Tôi biết rằng hiệp phương sai và contravariance đã có một số hỗ trợ thông qua các chú thích IL + và - trong các tham số kiểu trong CLR 2.0. Không chắc chắn về các tính năng khác mặc dù.

0

Xem xét các tham số mặc định đã là một tính năng của VB.NET, có thể C# đã triển khai thực hiện nó ở cấp trình biên dịch. Tuy nhiên nhóm CLR có thể đã thực hiện một cách hoàn toàn mới để thực hiện nó.

Bạn nên sẵn sàng sửa đổi câu hỏi của bạn để nêu "những tính năng của C# 4.0 là thay đổi biên dịch sẽ áp dụng đối với .NET 3.5 framework"

2

Nó không phải là một danh sách, cũng không phải là dứt khoát, nhưng là một ví dụ , Tôi chỉ cần thiết lập một dự án VS2010 mới nhắm mục tiêu .NET 3.5 và tạo thành công một phương thức với các tham số mặc định, và gọi nó với các đối số có tên, cả hai đều là các tính năng C# 4.0.

0

Tôi đang nghĩ về những thay đổi đối với thông số "cũ" ...thay đổi lock sẽ không khả dụng vì yêu cầu quá tải mới - nhưng the "field-like events" changenên hoạt động. Tôi sẽ phải kiểm tra những gì trình biên dịch phát ra ;-p

Và chắc chắn đủ:

using System; 
class Program 
{ 
    public event EventHandler SomeHandler; 
    static void Main() { } 
} 

được accessors kiểu mới ;-p

+0

Người truy cập mới là gì? – Earlz

+0

@Marc: "thay đổi khóa" bạn đang nói đến là gì. –

+0

@Earlz - xem liên kết; triển khai sự kiện giống như trường đã thay đổi –

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