C thăng

Bách khoa toàn thư mở Wikipedia
Buớc tưới chuyển hướng Bước tới tìm kiếm
C#
C#
C Sharp wordmark.svg
Mẫu hình Lập trình cấu trúc, imperative, Lập trình hướng đối tượng, event-driven, task-driven, functional, generic, reflective, concurrent
Họ C
Thiết kế bởi Microsoft
Nhà phát triển Microsoft
Xuất hiện lần đầu , 2000; 18 năm trước
Kiểm tra kiểu

static, dynamic,[1]

strong, safe, nominative, partially inferred
Nền tảng Common Language Infrastructure
Giấy phép

CLR: MIT/X11[2]
Mono compiler: dual GPLv3 and MIT/X11
Libraries: LGPLv2

DotGNU: dual GPLLGPLv2
Phần mở rộng tên tập tin .cs
Trang mạng docs.microsoft.com/dotnet/csharp/language-reference/
Các trình thực thi lớn
Visual C#, .NET Framework, Mono, DotGNU
Phương ngữ
, Spec#, Polyphonic C#, Enhanced C#
Ảnh hưởng bởi

C++,[3]

Eiffel, Java,[3] Modula-3, Object Pascal,[4] ML, VB, Icon, Haskell, Rust, J#, , F#,[note 1] J++
Ảnh hưởng tới
Chapel,[5] Crystal,[6] D, J#, Dart,[7] F#, Hack, Java,[8][9] Kotlin, Monkey, Nemerle, Oxygene, Ring[10], Rust, Swift,[11] Vala

C# (đọc là "C thăng" hay "C sharp" ("xi-sáp")) là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, là phần khởi đầu cho kế hoạch .NET của họ. Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưng theo ECMAC#, chỉ bao gồm dấu số thường. Microsoft phát triển C# dựa trên C++Java. C# được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, DelphiJava.

C# được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC.

Mục tiêu của việc phát triển C#[sửa | sửa mã nguồn]

Tiêu chuẩn ECMA liệt kê các mục tiêu của việc thiết kế ngôn ngữ C#[12]:

  • Ngôn ngữ được dự định là một ngôn ngữ lập trình đơn giản, hiện đại, hướng đến nhiều mục đích sử dụng, và là một ngôn ngữ lập trình hướng đối tượng.
  • Ngôn ngữ và việc triển khai đáp ứng các nguyên tắc của ngành kỹ thuật phần mềm như kiểm tra chặt chẽ kiểu dữ liệu, kiểm tra giới hạn mảng, phát hiện các trường hợp sử dụng các biến chưa có dữ liệu, và tự động thu gom rác. Tính mạnh mẽ, sự bền bỉ, và năng suất của việc lập trình là rất quan trọng đối với ngôn ngữ này.
  • Ngôn ngữ sẽ được sử dụng để phát triển các thành phần của phần mềm theo hướng thích hợp cho việc triển khai trong các môi trường phân tán.
  • Khả năng di chuyển (portability) là rất quan trọng, đặc biệt là đối với những lập trình viên đã quen với C và C++.
  • Hỗ trợ quốc tế hóa (i18n).
  • Ngôn ngữ sẽ được thiết kế để phù hợp với việc viết các ứng dụng cho cả hai hệ thống: hosted và nhúng, từ các phần mềm quy mô lớn, đến các phần mềm chỉ có các chức năng đơn giản.
  • Mặc dù các ứng dụng C# có tính kinh tế đối với các yêu cầu về bộ nhớ và chế độ xử lý, ngôn ngữ này không cạnh tranh trực tiếp về hiệu năng và kích thước đối với ngôn ngữ C hoặc assembly.

Đặc điểm ngôn ngữ[sửa | sửa mã nguồn]

C#, theo một hướng nào đó, là ngôn ngữ lập trình phản ánh trực tiếp nhất đến .NET Framework mà tất cả các chương trình.NET chạy, và nó phụ thuộc mạnh mẽ vào framework này. Mọi dữ liệu cơ sở đều là đối tượng, được cấp phát và hủy bỏ bởi trình dọn rác Garbage-Collector (GC), và nhiều kiểu trừu tượng khác chẳng hạn như class, delegate, interface, exception... phản ánh rõ ràng những đặc trưng của.NET runtime.

So sánh với C và C++, ngôn ngữ này bị giới hạn và được nâng cao ở một vài đặc điểm nào đó, nhưng không bao gồm các giới hạn sau đây:

  • Các con trỏ chỉ có thể được sử dụng trong chế độ không an toàn. Hầu hết các đối tượng được tham chiếu an toàn, và các phép tính đều được kiểm tra tràn bộ đệm. Các con trỏ chỉ được sử dụng để gọi các loại kiểu giá trị; còn những đối tượng thuộc bộ gom rác (garbage-collector) thì chỉ được gọi bằng cách tham chiếu.
  • Các đối tượng không thể được giải phóng tường minh.
  • Chỉ có đơn kế thừa, nhưng có thể cài đặt nhiều interface trừu tượng (abstract interfaces). Chức năng này làm đơn giản hóa sự thực thi của thời gian thực thi.
  • C# thì an-toàn-kiểu (typesafe) hơn C++.
  • Cú pháp khai báo mảng khác nhau("int[] a = new int[5]" thay vì "int a[5]").
  • Kiểu thứ tự được thay thế bằng tên miền không gian (namespace).
  • C# không có tiêu bản.
  • Có thêm Properties, các phương pháp có thể gọi các Properties để truy cập dữ liệu.
  • Có reflection.

Lịch sử[sửa | sửa mã nguồn]

Từ C và âm nhạc đến C#[sửa | sửa mã nguồn]

Cái tên "C sharp" được lấy cảm hứng từ ký hiệu âm nhạc, trong đó một dấu thăng sau nốt nhạc "#" nghĩa là một nốt được chơi cao hơn nửa cung.[13] Điều này tương tự như trường hợp đặt tên của ngôn ngữ của C++, trong đó "++" chỉ ra rằng giá trị của một biến nên được tăng lên 1. Biểu tượng # cũng giống với bốn ký tự "+" (trong một lưới 2x2), ngụ ý rằng ngôn ngữ là một phiên bản tăng cường của C++ (gấp đôi C++).[14] Bởi vì giới hạn kỹ thuật của việc hiển thị (các font chuẩn, trình duyệt...) và sự thật là ký tự thăng (U+266F MUSIC SHARP SIGN (HTML ♯)) không hiện diện trong đa số các bàn phím, ký tự (U+0023 # NUMBER SIGN (HTML #)) đã được chọn để diễn đạt một cách tương đương trong cách viết tên ngôn ngữ.

Hậu tố "#" đã được sử dụng bởi một số ngôn ngữ khác của.NET là các biến thể của các ngôn ngữ hiện tại, bao gồm J# (một ngôn ngữ.NET cũng được thiết kế bởi Microsoft có nguồn gốc từ Java 1.1), A# (từ Ada) và ngôn ngữ lập trình chức năng F#.[15] Việc triển khai ban đầu của Eiffel for.NET được gọi là Eiffel#[16]. Hậu tố cũng đã được sử dụng cho các thư viện, chẳng hạn như Gtk# (một wrapper NET cho GTK+ và các thư viện GNOME khác) và Cocoa#.

Các phiên bản (versions)[sửa | sửa mã nguồn]

Phiên bản Đặc tả ngôn ngữ Ngày phát hành .NET Framework Visual Studio
ECMA ISO/IEC Microsoft
C# 1.0 Tháng 12 năm 2002 Tháng 4 năm 2003 Tháng 1 năm 2002 Tháng 1 năm 2002 .NET Framework 1.0 Visual Studio.NET 2002
C# 1.1
C# 1.2
Tháng 10 năm 2003 Tháng 4 năm 2003 .NET Framework 1.1 Visual Studio.NET 2003
C# 2.0 Tháng 6 năm 2006 Tháng 9 năm 2006 Tháng 9 2005[note 2] Tháng 11 năm 2005 .NET Framework 2.0 Visual Studio 2005
C# 3.0 Không[note 3] Tháng 8 năm 2007 Tháng 11 năm 2007

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

Visual Studio 2008
Visual Studio 2010
C# 4.0 Tháng 4 năm 2010 Tháng 4 năm 2010 .NET Framework 4 Visual Studio 2010
C# 5.0 Trong quá trình[18] Không[note 4] Tháng 6 năm 2013 Tháng 8 năm 2012 .NET Framework 4.5 Visual Studio 2012
Visual Studio 2013
C# 6.0 Không[note 5] Bản nháp Tháng 7 năm 2015 .NET Framework 4.6 Visual Studio 2015
C# 7.0 Không Tháng 3 năm 2017 .NET Framework 4.6.2 Visual Studio 2017
C# 7.1 Không Không Không Tháng 8 năm 2017 .NET Framework 4.6.2 Visual Studio 2017 phiên bản 15.3[19]
C# 7.2 Không Không Không Tháng 11 năm 2017 .NET Framework 4.7.1 Visual Studio 2017 phiên bản 15.5[20]

Các tính năng mới[sửa | sửa mã nguồn]

C# 2.0[21][sửa | sửa mã nguồn]

  • Generics
  • Partial types
  • Hàm Anonymous
  • Iterators
  • Các kiểu Nullable
  • Khả năng tiếp cận getter/setter riêng biệt
  • Phương pháp nhóm chuyển đổi (delegate)
  • Co- và Contra-variance cho các delegates (delegate)
  • Các lớp static
  • Delegate inference

C# 3.0[22][sửa | sửa mã nguồn]

  • LINQ[23]
  • Cải tiến trong việc khởi tạo đối tượng: Customer c = new Customer(); c.Name="James"; có thể viết là Customer c = new Customer { Name="James" };
  • Các biểu thức lambda: listOfFoo.Where(delegate(Foo x) { return x.size>10;}) trở thành listOfFoo.Where(x => x.size>10);
  • Mặc định gõ các biến cục bộ, ví dụ var x = "hello"; có thể hoán đổi với string x = "hello";
  • Các property được tự động hiện thực hóa
  • Các kiểu anonymous
  • Các hàm extension
  • Cây biểu thức
  • Các hàm dạng partial

C# 4.0[24][sửa | sửa mã nguồn]

  • Dynamic binding
  • Đối số được đặt tên và tùy chọn
  • Co- và contravariance dạng generic
  • Các kiểu interop nhúng ("NoPIA")

C# 5.0[25][sửa | sửa mã nguồn]

  • Các hàm asynchronous
  • Tìm thông tin thành phần gọi hàm

C# 6.0[26][sửa | sửa mã nguồn]

  • Compiler-as-a-service (Roslyn)
  • Nhập các thành viên kiểu static vào không gian tên.
  • Exception filters
  • Await trong các khối catch/finally
  • Tự động cài đặt property
  • Các thành viên trong thân biểu thức
  • Toán tử kiểm tra null
  • Chuỗi nội suy
  • Toán tử nameof

C# 7.0[27][sửa | sửa mã nguồn]

  • Các biến out
  • Pattern matching
  • Tuple
  • Deconstruction
  • Các hàm cục bộ
  • Kiểu ValueTask
  • Constructor and finalizer trong thân biểu thức
  • Getter và setter trong thân biểu thức
  • Throw cũng có thể được dùng làm biểu thức

C# 7.1[28][sửa | sửa mã nguồn]

  • Async main
  • Tên các phần tử tuple được nội suy

C# 7.2[29][sửa | sửa mã nguồn]

  • Reference ngữ nghĩa với các loại giá trị
  • Các đối số được đặt tên không có đuôi
  • Giới hạn truy cập private protected cho các field

.NET Framework[sửa | sửa mã nguồn]

.NET Framework là một thư viện class có thể được sử dụng với một ngôn ngữ.NET để thực thi các việc từ thao tác chuỗi cho đến phát sinh ra các trang web động (ASP.NET), phân tích XML và reflection..NET Framework được tổ chức thành tập hợp các namespace, nhóm các class có cùng chức năng lại với nhau, ví dụ như System.Drawing cho đồ hoạ, System.Collections cho cấu trúc dữ liệu và System.Windows.Forms cho hệ thống Windows Forms.

Cấp cao hơn nữa được cung cấp bởi khái niệm này là assembly. Một assembly là một file hoặc nhiều file được liên kết với nhau (thông qua file al.exe), chứa đựng nhiều namespace và object. Các chương trình cần các lớp để thực thi một chức năng đặc biệt nào đó sẽ tham chiếu các assembly chẳng hạn như System.Drawing.dll và System.Windows.Forms.dll cũng như các core library (lưu trong file mscorlib.dll).

Ví dụ đơn giản Hello World[sửa | sửa mã nguồn]

Dưới đây là một chương trình C# rất đơn giản, với ví dụ "Hello World" kinh điển:

using System;
class ExampleClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Chương trình này sẽ in ra màn hình console kết quả như sau:

Hello World!

Ở đoạn code trên, mỗi dòng code có một mục đích đặc biệt, chi tiết như sau:

Đầu tiên, dòng sau báo cho trình biên dịch biết chương trình sẽ sử dụng thư viện System.

using System;

Tiếp theo, dòng sau khai báo một lớp.

class ExampleClass

Hàm Main là hàm khởi động của chương trình. Trong C#, hầu như tất cả các hàm đều nằm trong một lớp nào đó. Do đó, Main có thể được đặt ở bất kỳ lớp nào trong chương trình, và khi có nhiều hàm Main, lập trình viên sẽ phải cấu hình cho trình biên dịch biết rằng hàm Main nào sẽ là hàm khởi động. Trong trường hợp này, chương trình của chúng ta sẽ sử dụng hàm Main ở class ExampleClass, hàm này trả về void (không có giá trị nào cả).

static void Main(string[] args)

Vì được khai báo là static, lập trình viên có thể gọi hàm này từ đoạn code khác với cú pháp

ExampleClass.Main()

Cuối cùng, câu lệnh sau là lệnh in ra màn hình của C#:

Console.WriteLine("Hello World!");

Console là một lớp static ở namespace System. Lớp này cung cấp các interface chuẩn cho việc nhập, xuất và báo lỗi của chương trình C#. Chương trình của chúng ta gọi hàm WriteLine và in ra dòng "Hello World!"

Ghi chú[sửa | sửa mã nguồn]

  1. ^ không đồng bộ
  2. ^ Tài liệu Microsoft C # 2.0 chỉ chứa các tính năng 2.0 mới. Đối với các tính năng cũ hơn, sử dụng thông số kỹ thuật 1.2
  3. ^ Không có thông số kỹ thuật ECMA hoặc ISO / IEC cho C # 3.0, 4.0, 5.0, 6.0 hoặc 7.0.
  4. ^ Không có thông số kỹ thuật ECMA hoặc ISO / IEC cho C # 3.0, 4.0, 5.0, 6.0 hoặc 7.0.
  5. ^ Không có thông số kỹ thuật ECMA hoặc ISO / IEC cho C # 3.0, 4.0, 5.0, 6.0 hoặc 7.0.

Tham khảo[sửa | sửa mã nguồn]

  1. ^ Torgersen, Mads (27 tháng 10 năm 2008). “New features in C# 4.0”. Microsoft. Truy cập ngày 28 tháng 10 năm 2008. 
  2. ^ https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT
  3. ^ a ă Naugler, David (tháng 5 năm 2007). “C# 2.0 for C++ and Java programmer: conference workshop”. Journal of Computing Sciences in Colleges 22 (5). Although C# has been strongly influenced by Java it has also been strongly influenced by C++ and is best viewed as a descendant of both C++ and Java. 
  4. ^ Hamilton, Naomi (1 tháng 10 năm 2008). “The A-Z of Programming Languages: C#”. Computerworld. Truy cập ngày 12 tháng 2 năm 2010. We all stand on the shoulders of giants here and every language builds on what went before it so we owe a lot to C, C++, Java, Delphi, all of these other things that came before us. (Anders Hejlsberg) 
  5. ^ “Chapel spec (Acknowlegements)” (PDF). Cray Inc. 1 tháng 10 năm 2015. Truy cập ngày 14 tháng 1 năm 2016. 
  6. ^ Borenszweig, Ary. “Crystal 0.18.0 released!”. It's heavily inspired by Ruby, and other languages (like C#, Go and Python). 
  7. ^ “Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013”. Google. Truy cập ngày 22 tháng 12 năm 2013. 
  8. ^ Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargsannotations), after they were introduced in the similar (and competing) C# language [1] [2]
  9. ^ Cornelius, Barry (1 tháng 12 năm 2005). “Java 5 catches up with C#”. University of Oxford Computing Services. Truy cập ngày 18 tháng 6 năm 2014. In my opinion, it is C# that has caused these radical changes to the Java language. (Barry Cornelius) 
  10. ^ Ring Team (5 tháng 12 năm 2017). “Ring programming language and other languages”. ring-lang.net. ring-lang. 
  11. ^ Lattner, Chris (3 tháng 6 năm 2014). “Chris Lattner's Homepage”. Chris Lattner. Truy cập ngày 3 tháng 6 năm 2014. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, CLU, and far too many others to list. 
  12. ^ http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
  13. ^ http://www.jameskovacs.com/blog/CNETHistoryLesson.aspx
  14. ^ http://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/?pp=2
  15. ^ https://web.archive.org/web/20090218222543/http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/faq.aspx
  16. ^ http://msdn.microsoft.com/en-us/library/ms973898.aspx
  17. ^ a ă “Using C# 3.0 from.NET 2.0”. Danielmoth.com. 13 tháng 5 năm 2007. Truy cập ngày 4 tháng 10 năm 2012. 
  18. ^ “Mono and Roslyn”. Tirania Blog. Miguel de Icaza. Truy cập ngày 9 tháng 4 năm 2014. Work in progress for C# 5.0.
  19. ^ https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes-v15.3#cs71
  20. ^ https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes
  21. ^ Có gì mới trong C# 2.0 http://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx
  22. ^ Tổng quan về C# 3.0 http://msdn.microsoft.com/en-us/library/bb308966.aspx
  23. ^ “[LINQ] Phần 1: Giới thiệu về LINQ Dam-mi-o”. Dam-mi-o. Truy cập 20 tháng 2 năm 2017. 
  24. ^ Tính năng mới trong C# 4.0 http://msdn.microsoft.com/en-us/magazine/ff796223.aspx
  25. ^ Định hướng tương lai cho Visual C# và Visual Basic http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-816T
  26. ^ Hiện trạng hiện thực hóa của ngôn ngữ https://github.com/dotnet/roslyn/wiki/Languages-features-in-C%23-6-and-VB-14
  27. ^ Có gì mới trong C# 7.0? https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7
  28. ^ https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-1
  29. ^ https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-2

Liên kết ngoài[sửa | sửa mã nguồn]