Sunday, 14 October 2018

C thăng – Wikipedia tiếng Việt


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 GPL và LGPLv2
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ữ

Cω, 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#, Cω, F#,[a]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 ECMA là C#, chỉ bao gồm dấu số thường. Microsoft phát triển C# dựa trên C++ và Java. C# được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java.

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#, 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.

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]


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 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).


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:


Ở đ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.


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

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


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!"



  1. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên dynamic

  2. ^ https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT

  3. ^ a ă Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên influenced by CPP

  4. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên influenced by op

  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, varargs và annotations), after they were introduced in the similar (and competing) C# language [1] [2]

  9. ^ Lỗi chú thích: Thẻ <ref> sai; không có nội dung trong thẻ ref có tên influenced

  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




Lỗi chú thích: Đã tìm thấy thẻ <ref> với tên nhóm “lower-alpha”, nhưng không tìm thấy thẻ tương ứng <references group="lower-alpha"/> tương ứng, hoặc thẻ đóng </ref> bị thiếu





No comments:

Post a Comment