C#

Nhiều phạm thức ( mặt hướng đối tượng ) biên trình ngôn ngữ

C#Hơi mềmĐẩy ra một loại căn cứ vào.NET dàn giáoCùng sau lại.NET,Mặt hướng đối tượngCao cấpBiên trình ngôn ngữ.C# là một loại từ C cùng C++ diễn sinh ra tới mặt hướng đối tượng biên trình ngôn ngữ. Nó ở kế thừa C cùng C++ cường đại công năng đồng thời trừ đi một ít chúng nó phức tạp đặc tính, làm này trở thành C ngôn ngữ trong gia tộc một loại hiệu suất cao cường đại biên trình ngôn ngữ. C# lấy.NET dàn giáo loại kho làm cơ sở, có được cùng loạiVisual BasicNhanh chóng khai phá năng lực. C# từAnders · Hales BergChủ trì khai phá, hơi mềm ở 2000 năm tuyên bố loại này ngôn ngữ, hy vọng mượn dùng loại này ngôn ngữ tới thay thế đượcJava.C# đã trở thànhEcma quốc tếCùngQuốc tế tiêu chuẩn tổ chứcTiêu chuẩn quy phạm.

C#
Biên trình phạm hìnhKết cấu hóa,Mặt hướng đối tượng,Phiếm hình
Ngôn ngữ gia tộcC
Thiết kế giảHơi mềm
Thật tác giảHơi mềm
Phát hành thời gian2000 năm,​24 năm trước​ (2000)
Trước mặt phiên bản
  • 12.0(2023 năm 11 nguyệt 14 ngày; ổn định phiên bản )[1]
編輯維基數據鏈接
Thao tác hệ thốngWindows,Linux,Mac OS X,Android
Cho phép chứng
Văn kiện mở rộng danh.cs,.csx
Trang webdocs.microsoft/en-us/dotnet/csharp/編輯維基數據鏈接
Chủ yếu thật làm sản phẩm
.NET,.NET dàn giáo,Mono,DotGNU
Diễn sinh phó ngôn ngữ
,Spec#(Tiếng Anh:Spec Sharp),Polyphonic C#(Tiếng Anh:Polyphonic C sharp)
Dẫn dắt ngôn ngữ
C++,Java,Eiffel,Modula-3,Object Pascal
Ảnh hưởng ngôn ngữ
Clojure[4],D ngôn ngữ,F#,Java5,Nemerle,Vala

Mệnh danh

Biên tập

C# phát âm vì “C sharp”, “#” đọc làm “sharp” (/ʃɑːp/), mệnh danh dẫn dắt với âm nhạc thượng tên gọi luật lữ “C♯”,Ở âm nhạc trung “C♯” tỏ vẻ C thăng bán âm, vì so C cao một chút âm tiết, thả “#” giống nhau 4 cái dấu cộng, hơi mềm mượn dùng như vậy mệnh danh, lấy tỏ vẻ C# ở một ít ngôn ngữ đặc tính phương diện đối C++ tăng lên ý tứ.

Bởi vìMàn hình( tiêu chuẩnTự thể,Trình duyệtChờ ) kỹ thuật hạn chế, thả đại bộ phậnBàn phím phối tríThượng không tồn tạiThăng ký hiệu( ♯ ), cho nênGiếng hào( # ) bị dùng với nàyThể thức ngôn ngữTên trung, ước định ở ECMA-334 C# ngôn ngữ quy phạm trung[5].

Thiết kế mục tiêu

Biên tập

ECMA tiêu chuẩn liệt ra C# thiết kế mục tiêu:

  • C# chỉ ở thiết kế trở thành một loại “Đơn giản, hiện đại, thông dụng”, cùng với mặt hướng đối tượng trình tự thiết kế ngôn ngữ
  • Này loại ngôn ngữ thực hiện, ứng cung cấp đối với dưới phần mềm công trình yếu tố duy trì: Cường loại hình kiểm tra, số tổ duy độ kiểm tra, chưa khởi động lại lượng biến đổi trích dẫn kiểm tra đo lường,Tự động rác rưởi thu thập( Garbage Collection, chỉ một loại ký ức thể tự động phóng thích kỹ thuật ). Phần mềm cần thiết làm được cường đại, kéo dài, cũng có so cường biên trình sức sản xuất.
  • Này loại ngôn ngữ vì ở phân bố thức hoàn cảnh trung khai phá cung cấp áp dụng lắp ráp khai phá ứng dụng.
  • Vì sử lập trình viên dễ dàng di chuyển đến loại này ngôn ngữ, nguyên số hiệu nhưng nhổ trồng tính thập phần quan trọng, đặc biệt là đối với những cái đó đã quen thuộc C cùng C++ lập trình viên mà nói.
  • Đối quốc tế hóa duy trì trọng yếu phi thường.
  • C# thích hợp vì độc lập cùng khảm nhập thức hệ thống biên soạn trình tự, từ sử dụng phức tạp thao tác hệ thống đại hình hệ thống đến riêng ứng dụng loại nhỏ hệ thống đều áp dụng.

Lịch sử

Biên tập

NguyênBorlandCông ty thủ tịch nghiên cứu phát minh thiết kế sưAnders · Hales Berg( Anders Hejlsberg ) ở hơi mềm khai pháVisual J++1.0, thực mau Visual J++ từ 1.1 phiên bản thăng cấp đến 6.0 bản.SUNCông ty cho rằng Visual J++ trái với Java khai phá ngôi cao trung lập tính, đối hơi mềm đưa ra tố tụng. 2000 năm 6 nguyệt 26 ngày hơi mềm ở Orlando cử hành “Chức nghiệp khai phá nhân viên kỹ thuật đại hội” ( PDC 2000 ) thượng, phát biểu tân ngôn ngữ C#. C# ngôn ngữ thay thế được Visual J++, ngôn ngữ bản thân thâm chịu Visual Basic, Java, C cùng C++ ảnh hưởng.

Phiên bản

Biên tập
Phiên bản Ngôn ngữ quy cách Ngày .NET dàn giáoPhiên bản Visual Studio phiên bản
ECMA ISO/IEC Microsoft
C# 1.0 2002 năm 12 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2003 năm 4 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2002 năm 1 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2002 năm 1 nguyệt .NET Framework 1.0 Visual Studio.NET 2002
C# 1.1
C# 1.2
2003 năm 10 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2003 năm 4 nguyệt .NET Framework 1.1(Tiếng Anh:.NET Framework 1.1) Visual Studio.NET 2003
C# 2.0 2006 năm 6 nguyệt 2006 năm 9 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2005 năm 9 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2005 năm 11 nguyệt .NET Framework 2.0 Visual Studio 2005
C# 3.0 Không 2007 năm 8 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2007 năm 11 nguyệt

.NET Framework 2.0 (Except LINQ)[6]
.NET Framework 3.0(Except LINQ)[6]
.NET Framework 3.5

Visual Studio 2008
Visual Studio 2010
C# 4.0 2010 năm 4 nguyệt 2010 năm 4 nguyệt .NET Framework 4 Visual Studio 2010
C# 5.0 2017 năm 12 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2018 năm 12 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2013 năm 6 nguyệt(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2012 năm 8 nguyệt .NET Framework 4.5 Visual Studio 2012
Visual Studio 2013
C# 6.0 Không Bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2015 năm 7 nguyệt /2016-06-27 .NET Framework 4.6/.NET Core 1.0 Visual Studio 2015
C# 7.0 Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2017 năm 3 nguyệt .NET Framework 4.6.2 Visual Studio 2017
C# 7.1 Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2017 năm 8 nguyệt /2016-08-14 .NET Framework 4.7(Tiếng Anh:.NET Framework 4.7)/.NET Core 2.0 Visual Studio 2017version 15.3[7]
C# 7.2 Không Không Kiến nghị bản dự thảo 2017 năm 11 nguyệt .NET Framework 4.7.1 Visual Studio 2017version 15.5[8]
C# 7.3 Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2018 năm 5 nguyệt /2018-05-30/2018-12-04 .NET Framework 4.7.2/.NET Core 2.1/.NET Core 2.2 Visual Studio 2017version 15.7[8]
C# 8 Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2019 năm 9 nguyệt /2019-09-23/2019-12-03 .NET Framework 4.8/.NET Core 3.0/.NET Core 3.1 Visual Studio 2019version 16.3[8]
C# 9 Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2020 năm 11 nguyệt .NET 5 Visual Studio 2019version 16.8[8]
C# 10[9] Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2021 năm 11 nguyệt .NET 6 Visual Studio 2022version 17.0[10]
C# 11[9] Không Không Kiến nghị bản dự thảo(Giao diện lưu trữ sao lưu,Tồn vớiInternet hồ sơ quán) 2022 năm 11 nguyệt .NET 7 Visual Studio 2022version 17.4[11]
C# 12[12] Không Không Kiến nghị bản dự thảo 2023 năm 11 nguyệt .NET 8 Visual Studio 2022version 17.8[13]

Ngôn ngữ đặc tính

Biên tập

Tương đối vớiCCùngC++,Cái này ngôn ngữ ở rất nhiều phương diện tiến hành rồi hạn chế cùng tăng cường:

  • Kim đồng hồ( Pointer ) chỉ có thể dùng với không an toàn hình thức bên trong. Đại đa số đối tượng phỏng vấn xuyên thấu qua an toàn trích dẫn thực hiện, để tránh miễn không có hiệu quả thuyên chuyển, hơn nữa có rất nhiều thuật toán dùng với nghiệm chứng tràn ra, kim đồng hồ chỉ có thể dùng với thuyên chuyển giá trị loại hình, cùng với chịuRác rưởi thu thậpKhống chế uỷ trị đối tượng.
  • Đối tượng không thể bị hiện thức phóng thích, thay thế vì đương không tồn tại bị trích dẫn khi xuyên thấu qua rác rưởi thu về khí thu về.
  • Chỉ cho phépChỉ một kế thừa( single inheritance ), nhưng là một cái loại có thể thực hiện nhiềuTiếp lời( interfaces ).
  • C# so C++ càng thêmLoại hình an toàn.Cam chịu an toàn thay đổi làẨn hàm thay đổi,Tỷ như từ đoản chỉnh hình thay đổi vì trường chỉnh hình cùng từ diễn sinh loại thay đổi làm cơ sở bổn loại. Mà tiếp lời bố ngươi hình cùng chỉnh hình, cập cái cử hình cùng chỉnh hình không cho phép ẩn hàm thay đổi, phiKhông kim đồng hồ( xuyên thấu qua trích dẫn tương tự đối tượng ) cùng người dùng định nghĩa loại hình ẩn hàm thay đổi tự đoạn bị hiện thức xác định, bất đồng với C++ phục chế cấu tạo hàm số.
  • Số tổ thanh minh ngữ pháp bất đồng ( "int[] a = new int[5]" mà không phải "int a[5]" ).
  • Cái cửNằm ở này nơiMệnh danh không gianTrung.
  • C# trung không cóMẫu( Template ), nhưng là ở C# 2.0 trung dẫn vàoPhiếm hình( Generic programming ), hơn nữa duy trì một ít C++ mẫu không duy trì đặc tính. Tỷ như phiếm hình tham số trung loại hình ước thúc. Về phương diện khác, biểu đạt thức không thể giống C++ mẫu trung bị dùng với loại hình tham số.
  • Thuộc tínhDuy trì, sử dụng cùng loại phỏng vấn thành viên phương thức thuyên chuyển.
  • Hoàn chỉnhPhản xạDuy trì.

C# 2.0 đặc tính

Biên tập

Nhằm vào với.NET SDK 2.0 ( tương đối ứng với ECMA-334 tiêu chuẩn đệ tam bản ), C# tân đặc tính có:

Bộ phận loại

Biên tập

Phân bộ phân loạiĐem phân loại thực hiện phân ở nhiều văn kiện trung. Nên khái niệm với C# trung lần đầu xuất hiện, trừ bỏ có thể đem một cái phân loại thành viên tách ra gửi, còn sửASP.NETTrung số hiệu từ đứng sau có thể thực hiện. Số hiệu từ đứng sau thực hiện HTML số hiệu cùng hậu trường lẫn nhau số hiệu chia lìa.

file1.cs:

publicpartialclassMyClass1
{
publicvoidMyMethod1()
{
// implementation
}
}

file2.cs:

publicpartialclassMyClass1
{
publicvoidMyMethod2()
{
// implementation
}
}

Phân bộ phân loại cái này đặc tính cho phép đem một cái phân loại biên soạn công tác phân phối cấp nhiều người, một người viết một văn kiện, dễ bềPhiên bản khống chế.Nó lại có thể cách ly tự động sinh thành số hiệu cùng nhân công viết số hiệu, tỷ như thiết kếCửa sổ thể ứng dụng trình tựKhi.

Phiếm hình

Biên tập

Phiếm hình,Hoặc tham số hóa loại hình, là bị C# duy trì.NET 2.0 đặc tính. Bất đồng với C++ mẫu,.NET tham số hóa loại hình là ở vận hành khi bị ví dụ thực tế hóa, mà không phải biên dịch khi, bởi vậy nó có thể vượt ngôn ngữ, mà C++ mẫu lại không được. C# phiếm hình loại trong biên chế dịch khi, tiên sinh thành trung gian số hiệu IL, thông dụng loại hình ký hiệu T chỉ là một cái chiếm vị phù; ở ví dụ thực tế hóa loại khi, căn cứ thực tế số liệu loại hình thay thế T cũng từ tức thời biên dịch khí ( JIT ) sinh thành bản địa số hiệu, trong đó sử dụng thực tế số liệu loại hình, cùng cấp với dùng thực tế loại hình viết bình thường loại.

Nó duy trì một ít đặc tính cũng không bị C++ mẫu trực tiếp duy trì, tỷ như ước thúc phiếm hình tham số thực hiện một cái tiếp lời. Về phương diện khác, C# không duy trì vô loại hình phiếm hình tham số. Không giống Java trung phiếm hình, ởCLIGiả thuyết cơ trung,.NET generics sử dụngCụ hóaSinh thành phiếm hình tham số, nó cho phép ưu hoá cùng bảo tồn loại hình tin tức.[14]

Phiếm hình loại trung, có thể dùng where mấu chốt tự đối tham số loại hình thực hiện ước thúc. Tỷ như:

classNode<T,V>
whereT:Stack,IComparable,new(),class
whereV:Stack,struct
{...}

Kể trên tỏ vẻ T cùng V cần thiết là Stack loại hoặc này đẻ ra loại, T cần thiết kế thừa IComparable tiếp lời, có vô tham cấu tạo hàm số, là trích dẫn loại hình; V cần thiết là giá trị loại hình.

Phiếm hình không chỉ có có thể tác dụng ở loại thượng, cũng có thể đơn độc dùng ở loại phương pháp thượng, xưng là “Phiếm hình phương pháp”.

Phiếm hình loại trạng thái tĩnh thành viên lượng biến đổi ở tương đồng phong bế loại gian cùng chung, bất đồng phong bế loại gian không cùng chung.

Phiếm hình loại trung phương pháp trọng tái, tham số loại hình T cùng V ở vận hành khi xác định, không ảnh hưởng cái này loại thông qua biên dịch. C# phiếm hình là ở ví dụ thực tế phương pháp bị thuyên chuyển khi kiểm tra trọng tái hay không sinh ra lẫn lộn, mà không phải ở phiếm hình loại bản thân biên dịch khi kiểm tra. Đặc biệt mà, đương giống nhau phương pháp cùng phiếm hình phương pháp có tương đồng ký tên khi, sẽ bao trùm phiếm hình phương pháp.

Trạng thái tĩnh phân loại

Biên tập

Trạng thái tĩnh phân loại nó không thể bị ví dụ thực tế hóa, hơn nữa chỉ có thể có trạng thái tĩnh thành viên. Này cùng rất nhiều quá trình ngôn ngữ trungMô khốiKhái niệm tương cùng loại.

Thay đổi khí

Biên tập

Một loại tân hình thứcThay đổi khíNó cung cấp hàm số thức biên trình trunggenerator,Sử dụngyield return

Cùng loại vớiPythonTrung sử dụngyield

// Method that takes an iterable input (possibly an array)
// and returns all even numbers.
publicstaticIEnumerable<int>GetEven(IEnumerable<int>numbers)
{
foreach(intiinnumbers)
{
if(i%2==0)yieldreturni;
}
}

Những việc cần chú ý:

  • foreach tuần hoàn khi suy xét tuyến trình an toàn tính, không cần ý đồ đối bị biến lịch tập hợp tiến hành remove cùng add chờ thao tác
  • IEnumerable tiếp lời là LINQ đặc tính trung tâm tiếp lời. Chỉ có thực hiện IEnumerable tiếp lời tập hợp, mới có thể chấp hành tương quan LINQ thao tác, tỷ như select,where chờ

Nặc danh phương pháp

Biên tập

Nặc danh phương pháp cùng loại với hàm số thức biên trình trungBế bao.[15]Nặc danh phương pháp là thông qua sử dụng delegate mấu chốt tự sáng tạo ủy thác ví dụ thực tế tới thanh minh. Tỷ như:

delegatevoidNumberChanger(intn);

NumberChangernc=delegate(intx)
{
Console.WriteLine("Anonymous Method: {0}",x);
};



publicvoidFoo(objectparameter)
{
//...

ThreadPool.QueueUserWorkItem(delegate
{
// anonymous delegates have full access to local variables of the enclosing method
if(parameter==...)
{
//...
}

//...
});
}

Ủy thác hiệp biến cùng nghịch biến

Biên tập

Ủy thácKý tênHiệp biến cùng nghịch biến.[16]

Thuộc tính phỏng vấn khí có thể bị đơn độc thiết trí phỏng vấn cấp bậc

Biên tập

Ví dụ:

stringstatus=string.Empty;

publicstringStatus
{
get{returnstatus;}// anyone can get value of this property,
protectedset{status=value;}// but only derived classes can change it
}

Nhưng không loại hình

Biên tập

Nhưng không loại hình( cùng cái dấu chấm hỏi, nhưint? i = null;) cho phép thiết trínullCấp bất luận cái gì loại loại hình.

int?i=null;
objecto=i;
if(o==null)
Console.WriteLine("Correct behaviour - runtime version from September 2005 or later");
else
Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)");

?? Giải toán tử

Biên tập

(??): Nếu tả giải toán số biểu đạt thức giá trị không vì không giá trị khi hồi truyền nên giá trị, nếu vì không giá trị tắc phản hồi hữu giải toán số biểu đạt thức giá trị.

objectnullObj=null;
objectobj=newObject();
returnnullObj??obj;// returns obj

Chủ yếu dùng làm đem một cái nhưng không loại hình phú giá trị cấp không thể không loại hình giản tiện ngữ pháp

int?i=null;
intj=i??0;// Unless i is null, initialize j to i. Else (if i is null), initialize j to 0.

C# 3.0 đặc tính

Biên tập

C# 3.0 tuyên bố với 2007 năm 10 nguyệt 17 ngày, là.NET Framework 3.5 một bộ phận, nó tân đặc tính linh cảm đến từ chínhHàm số thức biên trìnhNgôn ngữ, như:HaskellCùngML,Cũng rộng khắp mà dẫn vàoLanguage Integrated Query( LINQ ) hình thức đến thông dụng ngôn ngữ vận hành kho trung e.[17]

Ngôn ngữ tổng thể tuần tra( tiếng Anh:LanguageIntegratedQuery,Viết tắt:LINQ):[18]Trên dưới văn tương quan mấu chốt tự "from,where,select"Nhưng dùng cho tuần tra SQL, XML, tập hợp chờ. Này đó đánh dấu phù ở LINQ trên dưới văn trung bị làm mấu chốt tự, nhưng là chúng nó gia tăng sẽ không phá hư vốn có tên làfrom,whereHoặcselectLượng biến đổi.

Loại hình khởi động lại khí

Biên tập
Customerc=newCustomer();
c.Name="James";

Nhưng viết làm:

Customerc=newCustomer(){Name="James"};

Tập hợp khởi động lại khí

Biên tập
MyListlist=newMyList();
list.Add(1);
list.Add(2);

Nhưng viết làm

MyListlist=newMyList{1,2};

Giả thiếtMyListThực hiệnSystem.Collections.IEnumerableThả có một cáiAddPhương pháp method[19]

Nặc danh loại hình

Biên tập
varx=new{Name="James"};

Bộ phận lượng biến đổi loại hình suy đoán

Biên tập

Bộ phận lượng biến đổiLoại hình suy đoán:

varx=newDictionary<string,List<float>>();

Cùng cấp với

Dictionary<string,List<float>>x=newDictionary<string,List<float>>();

Nó chỉ là một cáiNgữ pháp đường,Cái này đặc tính bị nặc danh loại hình thanh minh khi sở yêu cầu

Lambda biểu đạt thức

Biên tập

Lambda biểu đạt thức( vô hàm thức tên đồ vật phương pháp ở thể thức ngôn ngữ trung biểu đạt ngữ pháp ):

listOfFoo.Where(
delegate(Foox)
{
returnx.Size>10;
}
)
Nhưng viết làm
listOfFoo.Where(x=>x.Size>10);

Biên dịch khí phiên dịch Lambda biểu đạt thức vì cường loại hình ủy thác hoặc cường loại hìnhBiểu đạt thức thụ.

Những việc cần chú ý:

  • Nếu chỉ có một cái tham số, có thể tỉnh lược dấu móc (), tỷ như item=>{Console.WriteLine( "Chỉ có một cái tham số {0} Lambda biểu đạt thức",item); };
  • Nếu chỉ có một cái phản hồi giá trị câu nói, có thể tỉnh lược hoa dấu móc {}, return mấu chốt tự, chi nhánh, tỷ như item => {return item % 2 == 0;}; viết lại thành: item =>item %2 == 0;
  • Lambda biểu đạt thức có thể phân phối cấp Func, Action hoặc Predicate ủy thác.

Tự động hoá thuộc tính

Biên tập

Biên dịch khí đem tự động sinh thành tư hữu lượng biến đổi cùng thích hợp getter ( get phỏng vấn khí ) cùng setter ( set phỏng vấn khí ), như:

publicstringName
{
get;
set;
}

Mở rộng phương pháp

Biên tập

Mở rộng phương phápCó thể sử hiện có loại hình tăng thêm phương pháp, mà không cần sáng tạo tân đẻ ra loại hình, một lần nữa biên dịch hoặc lấy cái khác phương thức sửa chữa nguyên thủy loại hình.

Sử dụng mở rộng phương pháp, cần thiết ở một cái phi khảm bộ, phi phiếm hình trạng thái tĩnh loại trung định nghĩa một cái trạng thái tĩnh phương pháp, phương pháp cái thứ nhất tham số cần thiết phụ gia this mấu chốt tự làm tiền tố, cái thứ nhất tham số không thể có cái khác tân trang phù ( như ref hoặc là out ), phương pháp này đem bị biên dịch khí tăng thêm đến nên this loại hình trung.

publicstaticclassIntExtensions
{
publicstaticvoidPrintPlusOne(thisintx)
{
Console.WriteLine(x+1);
}
}

intfoo=0;
foo.PrintPlusOne();

Những việc cần chú ý:

  • Mở rộng phương pháp chỉ biết gia tăng biên dịch khí công tác, nhưng sẽ không ảnh hưởng trình tự vận hành tính năng ( dùng kế thừa phương thức vì một cái loại hình gia tăng đặc tính ngược lại sẽ ảnh hưởng tính năng )
  • Nếu nguyên lai loại trung có một cái phương pháp, cùng mở rộng phương pháp giống nhau, như vậy mở rộng phương pháp sẽ không bị thuyên chuyển, biên dịch khí cũng sẽ không nhắc nhở

Phân bộ phương pháp

Biên tập

Cho phép số hiệu sinh thành khí sinh thành phương pháp thanh minh làm mở rộng điểm, nếu có người ở một cái khác bộ phận loại thực hiện nó mới có thể bị bao hàm với nguyên số hiệu biên dịch.[20]

  1. Phân bộ phương pháp ( Partial methods ) cần thiết định nghĩa ở phân bộ loại ( partial classes ) trung
  2. Định nghĩa phân bộ phương pháp yêu cầu dùng partial làm tân trang phù
  3. Phân bộ phương pháp không nhất định luôn là có chấp hành nội dung, nói cách khác định nghĩa phương pháp có thể một câu thao tác câu nói đều không có
  4. Phân bộ phương pháp phản hồi giá trị cần thiết là void
  5. Phân bộ phương pháp có thể là trạng thái tĩnh ( static ) phương pháp
  6. Phân bộ phương pháp có thể bao hàm tham số, tham số có thể bao hàm dưới tân trang từ: this,ref,params
  7. Phân bộ phương pháp cần thiết là tư hữu ( private ) phương pháp

Ví dụ:

partialclassC
{
staticpartialvoidM(inti);// defining declaration
}
partialclassC
{
staticpartialvoidM(inti)
{
dosomething();
}
}

C# 4.0 đặc tính

Biên tập

dynamic loại hình

Biên tập

C# 4.0 tân tăng dynamic mấu chốt tự, cung cấp động thái biên trình ( dynamic programming ), đem đã có trạng thái tĩnh đồ vật đánh dấu vì động thái đồ vật, cùng loạijavascript,PythonHoặcRuby.

dynamic mấu chốt tự đánh dấu ví dụ thực tế bị xử lý thành một cái đặc thù đóng gói object đối tượng, hủy bỏ CLI biên dịch khi loại hình kiểm tra, biên dịch khi bị giả định duy trì bất luận cái gì thao tác, nhưng nếu cũng không thực tế duy trì tắc vận hành thời báo sai.

dynamiccalc=GetCalculator();
intsum=calc.Add(10,20);

Ký tên tham số cùng nhưng tuyển tham số

Biên tập
publicStreamReaderOpenFile(stringpath,intbufferSize=1024)
{...}

Gọi OpenFile khi, trình tự có thể hoàn toàn điên đảo:

OpenFile(bufferSize:4096,path:"foo.txt");

Cùng COM lắp ráp hỗ động

Biên tập

Ở C# trung mở ra một cáiWordVăn kiện:

staticvoidMain(string[]args)
{
Word.ApplicationwordApplication=newWord.Application(){Visible=true};
wordApplication.Documents.Open(@ "C:\plant.docx",ReadOnly:true);
}

Ở C# ngón giữa địnhExcelMỗ một cách văn tự:

excelObj.Cells[5,5].Value="This is sample text";

Phiếm hình hiệp biến cùng nghịch biến

Biên tập

C# 4.0 chi việnHiệp biến cùng nghịch biến,Tỷ như ở phiếm hình giới mặt có thể hơn nữa in, out tân trang tự.

publicinterfaceIComparer<inT>
{
intCompare(Tleft,Tright);
}

publicinterfaceIEnumerable<outT>:IEnumerable
{
IEnumerator<T>GetEnumerator();
}

C# 5.0 đặc tính

Biên tập
  1. C# Evolution Matrix
  2. Async Feature ( bổ sung: async cùng await là một đôi ngữ pháp đường, cho phép khai phá nhân viên phi thường nhẹ nhàng thuyên chuyển căn cứ vào TASK dị bước biên trình ) async-await mấu chốt tự cũng không sẽ thật sự sáng tạo một cái tuyến trình trì nhiệm vụ, hoàn thành cái này động tác ỷ lại với bị thuyên chuyển phương pháp trung hàm số. Điểm này ở rất nhiều C# tiếng Trung giáo trình trung bị xem nhẹ, dẫn tới rất nhiều học tập tay mới nghĩ lầm await mấu chốt tự sẽ trực tiếp sáng tạo một cái tân tuyến trình trì nhiệm vụ.
  3. Caller Information

C# 6.0 đặc tính

Biên tập
  1. Duy đọc Auto thuộc tính
  2. Auto thuộc tính mới bắt đầu giả thiết thức
  3. Sử dụng trạng thái tĩnh
  4. Null - điều kiện giải toán tử
  5. Tự xuyến cắm giá trị
  6. Ngoại lệ trạng huống sàng chọn điều kiện
  7. nameof giải toán thức
  8. Catch cùng Finally khu khối trung Await
  9. Hướng dẫn tra cứu mới bắt đầu giả thiết thức
  10. Tập hợp mới bắt đầu giả thiết thức mở rộng phương pháp
  11. Cải tiến nhiều tái phân tích

Biểu đạt thức chủ thể ( Expression-bodied ) dùng cho loại phương pháp cùng chỉ đọc thuộc tính

Biên tập
usingSystem;

publicclassPerson
{
publicPerson(stringfirstName,stringlastName)
{
fname=firstName;
lname=lastName;
}

privatestringfname;
privatestringlname;

publicoverridestringToString()=>$ "{fname} {lname}".Trim();// phản hồi giá trị loại hình string
publicvoidDisplayName()=>Console.WriteLine(ToString());// phản hồi giá trị loại hình void
publicstringName=>$ "{fname} {lname}".Trim();// chỉ đọc thuộc tính
}

C# 7.0 đặc tính

Biên tập

out biến số

Biên tập

Có thể trực tiếp tuyên cáo một cái biến số ở nó muốn truyền vào địa phương, trở thành một cái out dẫn số[21]

Bỏ nguyên

Biên tập

Nguyên tổ / đối tượng giải cấu:

vartuple=(1,2,3,4,5);
(_,_,_,_,varfifth)=tuple;

Sử dụng is/switch hình thức xứng đôi:

varobj=CultureInfo.CurrentCulture.DateTimeFormat;
switch(obj)
{
caseIFormatProviderfmt:
Console.WriteLine($ "{fmt} object");
break;
casenull:
Console.Write("A null object reference");
break;
caseobject_:
Console.WriteLine("Some object type without format information");
break;
}

if(objisobject_){...}

Đối có out tham số phương pháp thuyên chuyển:

varpoint=newPoint(10,10);
// chỉ cần x, không quan tâm y
point.GetCoordinates(outintx,out_);

Tác dụng vực nội độc lập sử dụng cảnh tượng:

voidTest(Dtodto)
{
_=dto??thrownewArgumentNullException(nameof(dto));
}

Biểu đạt thức chủ thể ( Expression-bodied ) dùng cho loại thuộc tính, cấu tạo khí, chung kết khí, hướng dẫn tra cứu khí

Biên tập
usingSystem;
publicclassLocation
{
privatestringlocationName;

publicLocation(stringname)=>Name=name;// cấu tạo hàm số

publicstringName
{
get=>locationName;//get thuộc tính
set=>locationName=value;//set thuộc tính
}

publicoverridestringToString()=>GetType().Name;

~Location()=>Console.WriteLine($ "The {ToString()} finalizer is executing.");// tích cấu hàm số

privatestring[]types={"Baseball","Basketball","Football",
"Hockey","Soccer","Tennis",
"Volleyball"};

publicstringthis[inti]
{
get=>types[i];// hướng dẫn tra cứu khí
set=>types[i]=value;
}
}

C# 7.1 đặc tính

Biên tập
  1. async``Main phương pháp
  2. default thường giá trị giải toán thức
  3. Suy đoán tuple hạng mục tên

C# 7.2 đặc tính

Biên tập
  1. Cụ bị thật giá trị hình khác tham khảo ngữ ý
  2. Vô hậu trí ký tên dẫn số
  3. Trị số thường giá trị trung trước trí điểm mấu chốt
  4. private protected tồn lấy tân trang từ

C# 8.0 đặc tính

Biên tập
  1. Nhưng không trích dẫn loại hình
  2. await yield return nhưng dị bước phản hồi thay đổi khí
  3. Index hướng dẫn tra cứu loại hình cùng Range khu gian loại hình
  4. Cho phép ở thanh minh tiếp lời khi vì tiếp lời thành viên cung cấp cam chịu thực hiện
  5. Đệ quy hình thức xứng đôi
  6. Biểu đạt thức hình thức Switch mấu chốt tự
  7. Trong biên chế dịch khí nhưng làm loại hình suy đoán dưới tình huống, cho phép tiến thêm một bước tỉnh lược loại hình thanh minh

C# 9 đặc tính

Biên tập

Tân “Record” loại hình

Biên tập

Ký lục loại hình, là một loại trích dẫn loại hình, cam chịu là không thể đổi. Ký lục loại hình bằng nhau phán đoán có thể thông qua trích dẫn hoặc là kết cấu tiến hành phán đoán.

  • Ưu điểm: Ký lục loại hình là nhẹ lượng cấp không thể đổi loại hình, có thể giảm bớt đại lượng số hiệu, có thể dựa theo kết cấu cùng trích dẫn tiến hành tương đối;
  • Khuyết điểm: Yêu cầu ví dụ thực tế hóa đại lượng đối tượng;
// cam chịu không thể đổi ký lục loại hình
publicrecordPerson(stringName,intAge);

// có thể biến đổi ký lục loại hình
publicrecordMutablePerson(stringName,intAge)
{
publicstringName{get;set;}=Name;
publicintAge{get;set;}=Age;
}

varperson1=newPerson("Alice",40);
varperson2=newPerson("Alice",40);

Console.WriteLine(person1==person2);// True kết cấu tương đồng
Console.WriteLine(person1.Equals(person2));// True kết cấu tương đồng
Console.WriteLine(ReferenceEquals(person1,person2));// False, trích dẫn bất đồng

// thay đổi cam chịu ký lục! --> sáng tạo một cái tân ký lục.
varperson3=person1with{Age=43};
Console.WriteLine(person3==person1);// False kết cấu bất đồng

// giải cấu (Destruct) một cái ký lục, đem ký lục thuộc tính lấy ra vì bản địa lượng biến đổi
var(name,age)=person3;

varperson4=newMutablePerson("Alice",40);
person4.Age=43;

// ký lục loại hình cũng có thể bị kế thừa
publicrecordCitizen(stringName,intAge,stringCountry):Person(Name,Age);
varcitizen=newCitizen("Alice",40,"China");
Console.WriteLine(person1==citizen);// False loại hình bất đồng;

“init” tồn lấy tử

Biên tập

init tồn lấy tử tỏ vẻ nên thuộc tính tương ứng loại hình chỉ có thể ở kiến cấu hàm thức (Constructor) trung hoặc là thuộc tính khởi động lại tư thế trung giao cho này giá trị, nếu nếm thử ở địa phương khác giả thiết nên thuộc tính giá trị, trong biên chế dịch khi liền sẽ tao biên dịch khí ngăn cản.

Kiểu mẫu như sau: Ở cái này kiểu mẫu trung, thành lập một cáiStudentLoại hình, hơn nữa thuộc tínhStudentNameCùngStudentIDChỉ có thể ở khởi động lại khi giao cho này giá trị.

publicclassStudent
{
publicStudent()
{
}

publicStudent(stringstudentName,stringstudentID)
{
StudentName=studentName;
StudentID=studentID;
}

publicstringStudentName{get;init;}="Default Name";
publicstringStudentID{get;init;}="00000000";
}

Nếu vào lúc này sáng tác dưới thể thức mã:

StudentDemoStudent=newStudent();
DemoStudent.StudentName="Test Name";

Biên dịch khí liền sẽ vô pháp biên dịch hơn nữa ném hồi sai lầm.

Mà nếu muốn thành lập học sinh tên vì “Test Name”, học sinh ID vì “0001” học sinh, tắc yêu cầu viết thành:

StudentDemoStudent=newStudent()// đồ vật khởi động lại giải toán thức
{
StudentName="Test Name";
StudentID="0001"
};

Hoặc là

StudentDemoStudent=newStudent("Test Name","0001");// tạ từ loại hình kiến cấu thức khởi động lại StudentName cùng với StudentID.

Nhất thượng tầng trần thuật thức hoặc xưng đỉnh cấp câu nói

Biên tập

Ở trước kia phiên bản, khai phá giả ở sáng tác nhất thượng tầng trần thuật thức ( như Program.cs) thể thức mã khi, yêu cầu bao hàm hoàn chỉnh namespace cùng class giá cấu, bởi vậy nếu muốn sáng tác Hello World thể thức khi, thể thức mã liền sẽ là:

usingSystem;

namespaceConsoleApp1
{
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("Hello World!");
}
}
}

Nhưng là ở C# 9 lúc sau, nhất thượng tầng trần thuật thức thể thức mã không cần bao hàm namespace cùng với class, nhưng đem này đơn giản hoá vì:

usingSystem;

Console.WriteLine("Hello World!");
// hoặc là đơn giản hoá vì một hàng câu nói:
System.Console.WriteLine("Hello World!");

Chú ý, một cái trình tự trung, chỉ có thể có một văn kiện sử dụng đỉnh cấp câu nói, hơn nữa đỉnh cấp câu nói cần thiết ở vào mệnh danh không gian hoặc loại hình định nghĩa phía trước.

lambda bỏ nguyên tham số

Biên tập
Func<int,int,int>zero=(_,_)=>0;
Func<int,int,int>func=delegate(int_,int_){return0;};

Ở C# 9 phía trước, mặc dù không sử dụng Lambda tham số cũng yêu cầu cho nó mệnh danh. C# 9 duy trì bỏ nguyên tham số một phương diện đơn giản hoá mệnh danh, về phương diện khác cũng tiết kiệm nội tồn phân phối. Càng quan trọng là nó khiến cho biên trình ý đồ càng minh xác, làm người vừa thấy liền biết cái này tham số là không cần, tăng cường số hiệu nhưng đọc tính cùng nhưng giữ gìn tính.

Chỉ có thể khởi động lại thiết trí khí

Biên tập

Init only setters, chỉ có thể thông qua đối tượng khởi động lại tiến hành phú giá trị thuộc tính.

publicclassInitDemo
{
publicstringStart{get;init;}
publicstringStop{get;init;}
}

// initDemo.Start = "Now"; // Error
// initDemo.End = "Tomorrow"; // Error

varinitDemo=newInitDemo
{
Start="Now",
Stop="Tomorrow"
};

Hàm số kim đồng hồ

Biên tập

Sử dụng delegate* có thể thanh minh hàm số kim đồng hồ.

unsafeclassFunctionPointer{
staticintGetLength(strings)=>s.Length;
delegate*<string,int>functionPointer=&GetLength;
}

publicvoidTest(){
Console.WriteLine(functionPointer("test"));// 4;
}

Nhảy qua bản địa khởi động lại

Biên tập
[System.Runtime.CompilerServices.SkipLocalsInit]
staticunsafevoidDemoLocalsInit(){
intx;
// chú ý, x không có khởi động lại, phát ra kết quả không xác định;
Console.WriteLine(*&x);
}

Nguyên sinh số nguyên loại hình

Biên tập

Hai cái tân số nguyên loại hình nint cùng nunit, ỷ lại ký chủ cơ cùng với biên dịch giả thiết.

Hiệp biến phản hồi loại hình

Biên tập

Hiệp biến phản hồi loại hình làm trọng viết phương pháp phản hồi loại hình cung cấp linh hoạt tính. Bao trùm phương pháp có thể phản hồi từ bị bao trùm cơ sở phương pháp phản hồi loại hình đẻ ra loại hình.

classPerson
{
publicvirtualPersonGetPerson(){returnnewPerson();}
}

classStudent:Person
{
publicoverrideStudentGetPerson(){returnnewStudent();}
}

Mô khối khởi động lại số hiệu

Biên tập

ModuleInitializerAttribute vì lắp ráp (assembly) định nghĩa khởi động lại số hiệu, lúc trước thủy hóa / thêm tái khi chấp hành, có thể tương tự loại trạng thái tĩnh cấu tạo hàm số, nhưng là là lắp ráp cấp bậc.

  • Cần thiết là trạng thái tĩnh, vô tham số, vô phản hồi giá trị phương pháp;
  • Không thể là phạm hình phương pháp, cũng không thể bao hàm ở phạm hình loại trung;
  • Không thể là tư hữu hàm số, cần thiết là công khai (public) hoặc là bên trong (internal) hàm số;

Trạng thái tĩnh lambda biểu đạt thức

Biên tập

static tân trang phù tăng thêm đến lambda biểu đạt thức hoặc nặc danh phương pháp. Này đem vô pháp bắt được bộ phận lượng biến đổi hoặc ví dụ thực tế trạng thái, do đó phòng ngừa ngoài ý muốn bắt được mặt khác lượng biến đổi.

Phân bộ phương pháp mở rộng

Biên tập

Di trừ bỏ phân bộ phương pháp hạ thuật hạn chế:

  • Cần thiết có void phản hồi loại hình.
  • Không thể có out tham số.
  • Không thể có bất luận cái gì nhưng phỏng vấn tính ( ẩn thức private ).

Khởi động lại biểu đạt thức đơn giản hoá

Biên tập

Nếu sáng tạo đối tượng loại hình đã biết khi, có thể ở new biểu đạt thức trung tỉnh lược nên loại hình.

Pointp=new(1,1);
Dictionary<string,int>dict=new();

Point[]points={new(1,1),new(2,2),new(3,3)};
varlist=newList<Point>{new(1,1),new(2,2),new(3,3)};

Ở bản địa hàm số thượng tăng thêm đánh dấu

Biên tập
usingSystem.Diagnostics;
usingSystem.Diagnostics.CodeAnalysis;
namespaceCoreApp2
{
classProgram
{
staticvoidMain(string[]args)
{
[Conditional( "DEBUG" )]
staticvoidDoSomething([NotNull]stringtest)
{
System.Console.WriteLine("Do it!");
}
DoSomething("Doing!");
}
}
}

GetEnumerator mở rộng

Biên tập

Có thể vì tùy ý loại hình tăng thêm một cái GetEnumerator mở rộng phương pháp, phản hồi một cái IEnumerator hoặc là IAsyncEnumerator ví dụ thực tế, do đó ở foreach tuần hoàn trung sử dụng.

usingSystem.Collections.Generic;
usingSystem.Collections.ObjectModel;
namespaceCoreApp2
{
publicstaticclassExtensions
{
publicstaticIEnumerator<T>GetEnumerator<T>(thisIEnumerator<T>enumerator)=>enumerator;
}

classProgram
{
staticvoidMain(string[]args)
{
IEnumerator<string>enumerator=newCollection<string>{"A","B","C"}.GetEnumerator();
foreach(variteminenumerator)
{
Console.WriteLine(item);
}
}
}
}

Hình thức xứng đôi tăng cường

Biên tập

Type patterns loại hình xứng đôi, phán đoán một cái lượng biến đổi loại hình

objectobj=newint();
vartype=objswitch
{
string=>"string",
int=>"int",
_=>"obj"
};
Console.WriteLine(type);// int

Relational patterns quan hệ xứng đôi:

classPerson
{
publicstringname;
publicintage;
publicPerson(stringa,intb){name=a;age=b;}
publicvoidDeconstruct(outstringa,outintb){a=name;b=age;}
}

classProgram
{
staticvoidMain(string[]args)
{
varperson1=newPerson("Alice",40);
varinRange=person1switch
{
(_,<18)=>"less than 18",
(_,>18)=>"greater than 18",
(_,18)=>"18 years old!"
};
Console.WriteLine(inRange);// greater than 18
}
}

Conjunctive and patterns logic hợp lấy xứng đôi:

// And pattern
varperson1=newPerson("Alice",40);
varageInRange=person1switch
{
(_,<18)=>"less than 18",
("Zhang Zhimin",_)and(_,>=18)=>"Alice is greater than 18"
};
Console.WriteLine(ageInRange);// Alice is greater than 18

Disjunctive or patterns logic tích lấy xứng đôi:

// Or pattern
varperson1=newPerson("Alice",40);
varageInRange=person1switch
{
(_,<18)=>"less than 18",
(_,18)or(_,>18)=>"18 or greater"
};
Console.WriteLine(ageInRange);// 18 or greater

Negated not patterns logic phi xứng đôi

// Not pattern
varperson1=newPerson("Alice",40);
varmeOrNot=person1switch
{
not("Alice",40)=>"Not me!",
_=>"Me:-)"
};
Console.WriteLine(meOrNot);// Me:-)

Parenthesized patterns mang dấu móc ưu tiên cấp xứng đôi:

// Parenthesized patterns
varis10=newIsNumber(true,10);
varn10=is10switch
{
((_,>1and<5)and(_,>5and<9))or(_,10)=>"10",
_=>"not 10"
};
Console.WriteLine(n10);// 10

C# 10 đặc tính

Biên tập

record struct

Biên tập

Giải quyết record chỉ có thể cấp class mà không thể cấp struct dùng vấn đề:

recordstructPoint(intX,intY);

sealed record ToString phương pháp

Biên tập

Có thể đem record ToString phương pháp đánh dấu thành sealed

struct vô tham cấu tạo hàm số

Biên tập

Vô tham cấu tạo hàm số khiến cho new struct() cùng default(struct) ngữ nghĩa không giống nhau

Dùng with sáng tạo tân nặc danh loại hình đối tượng

Biên tập
varx=new{A=1,B=2};
vary=xwith{A=3};

Nơi này y.A sẽ là 3.

Toàn cục using

Biên tập

Có thể cấp toàn bộ hạng mục bắt đầu dùng using, không cần mỗi cái văn kiện đều viết một phần.

Văn kiện phạm vi namespace

Biên tập

Trước kia viết namespace còn phải mang một tầng dấu móc nhọn. Hiện tại nếu một văn kiện chỉ có một cái namespace nói, trực tiếp ở văn kiện mở đầu viết:namespace MyNamespace;

Đại lượng không đổi tự phù xuyến cắm giá trị

Biên tập
conststringx="hello";
conststringy=$ "{x}, world!";

lambda cải tiến

Biên tập

lambda có thể mang attributes

Biên tập
f=[Foo](x)=>x;// cấp lambda thiết trí
f=[return:Foo](x)=>x;// cấp lambda phản hồi giá trị thiết trí
f=([Foo]x)=>x;// cấp lambda tham số thiết trí

Chỉ định phản hồi giá trị loại hình

Biên tập

Trước đây C# lambda phản hồi giá trị loại hình dựa suy luận, C# 10 cho phép ở tham số danh sách phía trước hiện thức chỉ định lambda phản hồi giá trị loại hình:

f = int () => 4;

Duy trì ref, in, out chờ tân trang

Biên tập
f = ref int (ref int x) => ref x; // phản hồi một cái tham số trích dẫn

Hạng nhất hàm số

Biên tập

Hàm số có thể ẩn thức thay đổi đến delegate, vì thế hàm số bay lên vì hạng nhất hàm số (first function):

voidFoo(){Console.WriteLine("hello");}
varx=Foo;
x();// hello

Tự nhiên ủy thác loại hình

Biên tập

lambda nhưng tự động sáng tạo tự nhiên ủy thác loại hình, vì thế không hề yêu cầu viết ra loại hình:

varf=()=>1;// Func<int>
varg=string(intx,stringy)=>$ "{y}{x}";// Func<int, string, string>
varh="test".GetHashCode;// Func<int>

CallerArgumentExpression

Biên tập

Sử dụng CallerArgumentExpression cái này attribute, biên dịch khí sẽ tự động bỏ thêm vào thuyên chuyển tham số biểu đạt thức tự phù xuyến, tỷ như:

voidFoo(intvalue,[CallerArgumentExpression("value")]string?expression=null)
{
Console.WriteLine(expression+"="+value);
}

Đương ngươi thuyên chuyển Foo(4 + 5) khi, sẽ phát ra 4 + 5 = 9. Này đối thí nghiệm dàn giáo cực kỳ hữu dụng

tuple hỗn hợp định nghĩa cùng sử dụng

Biên tập
inty=0;
(varx,y,varz)=(1,2,3);

Vì thế y liền biến thành 2, đồng thời còn sáng lập hai cái lượng biến đổi x cùng z, phân biệt là 1 cùng 3.

Tiếp lời duy trì trừu tượng trạng thái tĩnh phương pháp

Biên tập

.NET 6 trung cái này đặc tính vì preview đặc tính.

Phiếm hình attribute

Biên tập

Ở phương pháp thượng chỉ định AsyncMethodBuilder

Biên tập

Ở phương pháp thượng dùng [AsyncMethodBuilder(...)], tới sử dụng chính mình thực hiện async method builder, thay thế tự mang Task hoặc là ValueTask dị bước phương pháp cấu tạo khí. Có trợ giúp thực hiện linh chi tiêu dị bước phương pháp.

line chỉ thị khí duy trì hàng ngũ cùng phạm vi

Biên tập

Trước kia #line chỉ có thể dùng để chỉ định một văn kiện trung mỗ một hàng, hiện tại có thể chỉ định hàng ngũ cùng phạm vi:

#line (startLine, startChar) - (endLine, endChar) charOffset "fileName"
// tỷ như #line (1, 1) - (2, 2) 3 "test.cs"

Khảm bộ thuộc tính hình thức xứng đôi cải tiến

Biên tập

Trước kia ở xứng đôi khảm bộ thuộc tính thời điểm yêu cầu như vậy viết:

if (a is { X: { Y: { Z: 4 } } }) {... }

Hiện tại chỉ cần đơn giản:

if (a is { X.Y.Z: 4 }) {... }

Cải tiến tự phù xuyến cắm giá trị

Biên tập

Thực hiện tiếp cận linh chi tiêu tự phù xuyến cắm giá trị.

Source Generator v2

Biên tập

Bao gồm cường loại hình số hiệu xây dựng khí, cùng với tăng lượng biên dịch duy trì chờ

C# 11 đặc tính[22]

Biên tập

Phiếm hình thuộc tính

Biên tập

C# 11 bắt đầu duy trì thuộc tính ( attribute ) vì phiếm hình loại, tức cho phép thanh minh cơ loại vìSystem.AttributePhiếm hình loại:

publicclassGenericAttribute<T>:Attribute{}

Trạng thái tĩnh tiếp lời phương pháp

Biên tập

C# 11 bắt đầu cho phép tiếp lời trung định nghĩa trạng thái tĩnh phương pháp ( bao gồm giải toán phù trọng tái phương pháp ), thực hiện nên tiếp lời loại cần thiết bao hàm nên trạng thái tĩnh phương pháp[23]:

publicinterfaceIGetNext<T>whereT:IGetNext<T>
{
staticabstractToperator++(Tother);
}

Vô ký hiệu hữu di giải toán phù>>>

Biên tập

Tân tăng vô ký hiệu hữu di giải toán phù>>>,Dùng cho đối mang ký hiệu số tiến hànhLogic hữu di[24].

Phiếm hình toán học duy trì

Biên tập

Đối phiếm hình và đối tượng tiến hành toán học thao tác duy trì. Căn cứ vào trạng thái tĩnh tiếp lời phương pháp đặc tính, tự.NET 8.0 khởi, ởSystemMệnh danh không gian trung cung cấp toán học giải toán tương quan phiếm hình tiếp lời, hòng duy trì phiếm hình giải toán thao tác[25]:

publicstaticTResultSum<T,TResult>(IEnumerable<T>values)
whereT:INumber<T>
whereTResult:INumber<TResult>
{
TResultresult=TResult.Zero;

foreach(varvalueinvalues)
{
result+=TResult.Create(value);
}

returnresult;
}

Tự phù xuyến nội cắm trung đổi hành phù

Biên tập

Cho phép nội cắm tự phù xuyến trung{Cùng}Nội văn bản vượt nhiều hành

Nguyên thủy tự phù xuyến văn bản

Biên tập

Nguyên thủy tự phù xuyến văn bản lấy"""Bắt đầu cũng lấy"""Kết thúc, cho phép nhiều hành tự phù xuyến, nếu vì nhiều hành tự phù xuyến tắc lấy đơn độc một hàng"""Kết thúc, thả tự phù xuyến súc tiến lấy cuối cùng"""Lúc đầu vị trí làm cơ sở chuẩn. Nguyên thủy tự phù xuyến văn bản không tiến hành bất luận cái gì chuyển nghĩa thao tác, nhưng cho phép tự phù xuyến nội cắm ( mở đầu $ số lượng đại biểu nội cắm sở yêu cầu hoa dấu móc số )[26]:

varx=1;
vary=2;
varcode1="""int i = 0;" "";
varcode2=$ "" "int x = {x};" "";
varcode3=$$ "" "
#include<stdio.h>
intmain(void){
constchar*s="{y} = {{y}}";// {y} = 2
return0;
}
""";
Console.WriteLine($ "code1:\n{code1}\n");
Console.WriteLine($ "code2:\n{code2}\n");
Console.WriteLine($ "code3:\n{code3}\n");

UTF-8 tự phù xuyến mặt chữ lượng

Biên tập

Có thể đối tự phù xuyến mặt chữ lượng chỉ địnhu8Hậu tố tới chỉ định UTF-8 tự phù mã hóa tự phù xuyến mặt chữ lượng, này loại hình vìReadOnlySpan<byte>[27]:

Danh sách hình thức

Biên tập

Sử dụng[Cùng]Có thể định nghĩa danh sách hình thức, dùng choHình thức xứng đôi:

int[]numbers={1,2,3};

Console.WriteLine(numbersis[1,2,3]);// True
Console.WriteLine(numbersis[1,2,4]);// False
Console.WriteLine(numbersis[1,2,3,4]);// False
Console.WriteLine(numbersis[0or1,<=2,>=3]);// True

Trị sốIntPtrCùngUIntPtr

Biên tập

C# 11 khởinintCùngnuintLoại hình biệt danh phân biệt vìIntPtrCùngUIntPtr( C# 9 trung chúng nó chỉ bị cho rằng là “Tương tự”[28]).

Cải tiến phương pháp tổ hướng ủy thác thay đổi

Biên tập

Ưu hoá phương pháp tổ hướng ủy thác thay đổi tính năng. Tỷ như hạ thuật số hiệu trung, ở C# 11 trước,SumSoSumMethodGroupTính năng càng cao[29]:

staticreadonlyList<int>Numbers=Enumberable.Range(0,100).ToList();

publicintSum()
{
returnNumbers.Where(x=>Filter(x)).Sum();// <- faster
}

publicintSumMethodGroup()
{
returnNumbers.Where(Filter).Sum();// <- slower
}

staticboolFilter(intnumber)
{
returnnumber>50;
}

Trình tự chấp hành

Biên tập

C# thông thường không bị biên dịch trở thành có thể trực tiếp ởMáy tínhThượng chấp hànhCơ số haiBản địa số hiệu. CùngJavaCùng loại, nó bị biên dịch trở thành trung gian số hiệu ( Microsoft Intermediate Language ), sau đó thông qua.NET FrameworkGiả thuyết cơ—— được xưng làThông dụng ngôn ngữ vận hành kho—— chấp hành.

Sở hữu.NetBiên trình ngôn ngữĐều bị biên dịch thành loại này được xưng làThông dụng trung gian ngôn ngữTrung gian số hiệu. Bởi vậy tuy rằng cuối cùngTrình tựỞ mặt ngoài vẫn cứ cùng truyền thống ý nghĩa thượng nhưng chấp hành văn kiện đều có “.exe” hậu tố danh. Nếu máy tính thượng không có trang bị.Net Framework, như vậy này đó trình tự sẽ bắn ra khung thoại, yêu cầu người dùng download.net framework.

Ở trình tự chấp hành khi,.Net Framework đem trung gian số hiệu phiên dịch trở thành cơ số hai máy móc mã, do đó sử nó được đến chính xác vận hành. Cuối cùng cơ số hai số hiệu bị tồn trữ ở một cái giảm xóc khu ( Buffer ) trung. Cho nên một khi trình tự sử dụng tương đồng số hiệu, như vậy sẽ thuyên chuyển giảm xóc khu trung phiên bản. Như vậy nếu một cái.Net trình tự lần thứ hai bị vận hành, như vậy loại này phiên dịch không cần tiến hành lần thứ hai, tốc độ rõ ràng nhanh hơn.

Chuẩn hoá

Biên tập

Hơi mềm công ty đã hướngECMAXin đem C# làm một loại tiêu chuẩn. Ở 2001 năm 12 nguyệt, ECMA tuyên bố ECMA-334 C# ngôn ngữ quy phạm. C# ở 2003 mùa màng vì một cáiISOTiêu chuẩn ( ISO/IEC 23270 ). Hiện tại có một ít độc lập thực hiện đang ở tiến hành, bao gồm:

Thí dụ mẫu

Biên tập

C# Hello World thể thức

Biên tập

Phía dưới là một cái ở mệnh lệnh liệt thượng phát raHello WorldTiểu trình tự, loại này trình tự thông thường làm bắt đầu học tập trình tự ngôn ngữ cái thứ nhất bước đi:

usingSystem;

namespaceConsoleApp1
{
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("Hello World!");
}
}
}

Thực hiện

Biên tập

Hơi mềm đang ở dẫn dắtKhai nguyênTham khảo C# biên dịch khí cùng công cụ tập khai phá. Cái thứ nhất biên dịch khíRoslynBiên dịch thành trung gian ngôn ngữ ( IL ), cái thứ hai biên dịch khí RyuJIT,[30]Là một cái JIT ( tức thời ) biên dịch khí, nó là động thái, tiến hành động thái ưu hoá cũng biên dịch đem IL thay đổi vì CPU đằng trước bổn cơ số hiệu.[31]RyuJIT là khai nguyên, dùng C++ biên soạn.[32]Roslyn hoàn toàn là dùngUỷ trị số hiệu(C#) biên soạn, đã mở ra hơn nữa công năng lấy API hình thức xuất hiện. Bởi vậy, nó sử khai phá nhân viên có thể sáng tạo trọng cấu cùng chẩn bệnh công cụ.[2][33]Phía chính phủ thực hiện hai cái chi nhánh là.NET Framework ( bế nguyên, giới hạn Windows ) cùng.NET Core ( khai nguyên, vượt ngôi cao ); chúng nó cuối cùng dung hợp vì một cái khai nguyên thực hiện:.NET 5.0.[34]Ở.NET Framework 4.6 trung, tân JIT biên dịch khí thay thế được người trước.[30][35]

Mặt khác C# biên dịch khí ( trong đó một ít bao gồmCông cộng ngôn ngữ cơ sở kết cấuCùng.NET loại kho thực hiện ):

  • Hơi mềm Rotor hạng mục ( Rotor Project, trước mắt xưng làShared Source Common Language Infrastructure(Tiếng Anh:Shared Source Common Language Infrastructure)), cung cấpThông dụng ngôn ngữ vận hành kho(Common Language Runtime) thật làm cùng C# biên dịch khí. Nhưng là Shared Source Common Language Infrastructure ở 2006 năm 2.0 bản sau liền đình chỉ.
  • Từ Microsoft tài trợMonoHạng mục cung cấp C# biên dịch khí, nó cung cấp một cái khai nguyên C# biên dịch khí, một cái hoàn chỉnh CLI khai nguyên thực hiện, đồng thời cũng tiếp cận trăm phần trăm mà thật làm.NET FrameworkLoại kho. Mà Mono sau lại diễn vươn từ hơi mềm tán thành kẻ thứ ba bộ kiệnXamarin.
  • Dot GNUChuyên án ( hiện đã đình sản ) cũng cung cấp một cái khác tự do phiên bản C# biên dịch khí, cũng cung cấp.NET FrameworkLoại kho thật làm.

Trò chơi động cơUnitySử dụng C# làm này chủ yếu kịch bản gốc ngôn ngữ. Bởi vì Microsoft quyên tặng 24,000 đôla,GodotTrò chơi động cơ thực hiện một cái nhưng tuyển C# mô khối.

Tham khảo văn hiến

Biên tập
  1. ^Announcing C# 12.[2023 năm 11 nguyệt 18 ngày ].
  2. ^2.02.1The Roslyn.NET compiler provides C# and Visual Basic languages with rich code analysis APIs.: dotnet/roslyn.November 13, 2019[2021-08-16].( nguyên thủy nội dungLưu trữVới 2021-02-22 ) – thông qua GitHub.
  3. ^CoreCLR is the runtime for.NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes.: dotnet/coreclr.November 13, 2019[2021-08-16].( nguyên thủy nội dungLưu trữVới 2019-10-14 ) – thông qua GitHub.
  4. ^Rich Hickey Q&A by Michael Fogus.[2017-01-11].Nguyên thủy nội dung lưu trữ với 2017-01-11.
  5. ^C# Language Specification(PDF)4th.Ecma International.June 2006[2012-01-26].(Nguyên thủy nội dung(PDF)Lưu trữ với 2012-12-02 ).
  6. ^6.06.1Using C# 3.0 from.NET 2.0.Danielmoth. 2007-05-13[2012 năm 10 nguyệt 4 ngày ].(Nguyên thủy nội dungLưu trữ với 2012-09-29 ).
  7. ^Lưu trữ phó bản.[2018-09-06].( nguyên thủy nội dungLưu trữVới 2018-01-22 ).
  8. ^8.08.18.28.3Lưu trữ phó bản.[2018-09-06].( nguyên thủy nội dungLưu trữVới 2018-01-22 ).
  9. ^9.09.1What's new in C# 10.docs.microsoft.[2021-11-10].( nguyên thủy nội dungLưu trữVới 2022-02-08 )( nước Mỹ tiếng Anh ).
  10. ^Visual Studio 2022 version 17.0 Release Notes.docs.microsoft.[2022-06-24].( nguyên thủy nội dungLưu trữVới 2022-08-06 ).
  11. ^DeDiv-VR.Visual Studio 2022 version 17.4 Release Notes.learn.microsoft. 2024-06-11[2024-07-15]( nước Mỹ tiếng Anh ).
  12. ^BillWagner.What's new in C# 12.learn.microsoft. 2024-06-04[2024-07-15]( nước Mỹ tiếng Anh ).
  13. ^Murphy, Adrian.Visual Studio 17.8 now available!.Visual Studio Blog. 2023-11-14[2024-07-15]( nước Mỹ tiếng Anh ).
  14. ^An Introduction to C# Generics.[2020-09-25].( nguyên thủy nội dungLưu trữVới 2019-09-24 ).
  15. ^Anonymous Methods (C#).[2008-10-24].( nguyên thủy nội dungLưu trữVới 2008-04-17 ).
  16. ^Covariance and Contravariance in Delegates (C#).[2008-10-24].( nguyên thủy nội dungLưu trữVới 2008-10-12 ).
  17. ^Tim Anderson.C# pulling ahead of Java - Lead architect paints rosy C# picture.Reg Developer.The Register.2006-11-14[2007-01-20].( nguyên thủy nội dungLưu trữVới 2007-01-21 ).
  18. ^LINQ.Microsoft MSDN. 2007[2007-08-13].(Nguyên thủy nội dungLưu trữ với 2007-01-16 )( tiếng Anh ).
  19. ^The Mellow Musings of Dr. T: What is a collection?.[2008-10-24].( nguyên thủy nội dungLưu trữVới 2008-12-18 ).
  20. ^Partial Methods.[2007-10-06].( nguyên thủy nội dungLưu trữVới 2007-10-16 ).
  21. ^Vừa xem C# 7.0 trung tân công năng.[2016-09-14].( nguyên thủy nội dungLưu trữVới 2018-10-02 ).
  22. ^C# 11 trung tân tăng công năng.learn.microsoft.[2024-3-19].( nguyên thủy nội dungLưu trữVới 2024-03-19 )( tiếng Trung ( Trung Quốc đại lục ) ).
  23. ^Giáo trình: Thăm dò C# 11 công năng - tiếp lời trung trạng thái tĩnh giả thuyết thành viên.learn.microsoft.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2024-03-19 )( tiếng Trung ( Trung Quốc đại lục ) ).
  24. ^Vị giải toán phù cùng lệch vị trí giải toán phù ( C# tham khảo ).learn.microsoft.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2024-03-19 )( tiếng Trung ( Trung Quốc đại lục ) ).
  25. ^Preview Features in.NET 6 – Generic Math.devblogs.microsoft.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2024-02-01 )( nước Mỹ tiếng Anh ).
  26. ^C# trình tự thiết kế cơ sở.docs.eesast.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2024-03-19 )( tiếng Trung ( Trung Quốc đại lục ) ).
  27. ^Utf8 Strings Literals.learn.microsoft.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2024-03-04 )( nước Mỹ tiếng Anh ).
  28. ^Introducing C# 11: Numeric IntPtr and UIntPtr.anthonygiretti.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2023-11-30 )( nước Mỹ tiếng Anh ).
  29. ^C# 11 - Improved Method Group.prographers.[2024-3-20].( nguyên thủy nội dungLưu trữVới 2023-09-30 )( nước Mỹ tiếng Anh ).
  30. ^30.030.1The RyuJIT transition is complete!.microsoft. June 19, 2018[July 20,2021].( nguyên thủy nội dungLưu trữVới July 19, 2019 ).
  31. ^Managed Execution Process.microsoft.[July 20,2021].( nguyên thủy nội dungLưu trữVới December 23, 2017 ).
  32. ^coreclr/src/jit/.github.[July 20,2021].( nguyên thủy nội dungLưu trữVới January 9, 2019 ).
  33. ^C# Guide.docs.microsoft.[2017-11-20].( nguyên thủy nội dungLưu trữVới 2022-08-13 ).
  34. ^5.0.8.microsoft.[July 20,2021].( nguyên thủy nội dungLưu trữVới April 23, 2020 ).
  35. ^Mitigation: New 64-bit JIT Compiler.microsoft.[July 20,2021].( nguyên thủy nội dungLưu trữVới April 5, 2018 ).

Phần ngoài liên kết

Biên tập