Cú pháp khá giống với C/C++
Kiểu dữ liệu tham chiếu & giá trị
Truyền tham số kiểu giá trị cho hàm
Type-cast
Boxing & Unboxing
Điều khiển lặp foreach duyệt tập hợp
Kiểu dữ liệu mảng
54 trang |
Chia sẻ: tuanhd28 | Lượt xem: 1921 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Ngôn ngữ C#, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Ngôn ngữ C#ContentCấu trúc chương trình C#Kiểu dữ liệu, từ khoá, định danh biến, hằngChuyển đổi kiểuConsole I/OTham số ref, out, paramLệnh lặp for, while, do while, foreachLệnh phân nhánh switch, lệnh nhảyMảng 1 chiều, đa chiềuKiểu enumeration*Cấu trúc chương trình C#*using namespace { [Khóa truy xuất] class { public static void Main(){ }// thành viên khác }// lớp khác Cấu trúc chương trình C#using: làm code gọn hơn, ko cần phải dùng tên của namspaceusing System.namespace của chương trình: ko bắt buộcclass: tối thiểu có 1 lớp chứa hàm entry point Main của chương trìnhpublic static void Main(): hàm entry point của chương trình C#*Cấu trúc chương trình C#Nếu ko có namespace namespace mặc định ko tênNamespace có thể chứa: struct, interface, delegate, enumTrường hợp đơn giản nhất: 1 lớp, 1 file cs và namespace mặc định*Data TypeBao gồmLớp đối tượng object ký tự charChuỗi stringSố nguyên có dấu sbyte, short, int, long Số nguyên không dấu byte, ushort, uint, ulongSố thực float, double, decimalKiểu logic boolAlias của các lớp dữ liệu trong .NETstring System.Stringint System.Int32object System.Object*Data TypeSử dụng kiểu dữ liệuĐịnh nghĩa trước (C#)Built-in : int, long, string, objectChương trình định nghĩaClass, struct, enumPerson, Student, Employee*Data TypeBuilt-inUser definedThe built-in value typeNameCTS TypeSizeRangesbyteSystem.SByte 8-128..127shortSystem.Int1616 (-32768 .. 32767)intSytem. Int3232-231..231-1longSytem. Int6464-263..263-1byteSystem.SByte 80..255ushortSystem.UInt1616 (0 .. 65535)uintSystem.UInt3232 0..232-1ulongSystem.UInt64640..264-1floatSystem.Single32xấp xỉ từ 3,4E - 38 đến 3,4E+38doubleSystem.Double641,7E-308 đến 1,7E+308decimalSystem.Decimal128Có độ chính xác đến 28 con sốboolSystem.Boolean Kiểu true/falsecharSystem.Char16Ký tự unicode*The built-in reference typeobject: Sytem.ObjectKiểu dữ liệu gốc, cha của tất cả các kiểu dữ liệu trong C#object o = new object();string: Sytem.StringChuỗi ký tự Unicodestring s1 = “Hi”;string s2 = “Hi Hi “;string s = s1 + s2;*The built-in reference type*Phân loại kiểu dữ liệu*Value typeReference typeData typeint num;long count;Object obj = new Object();String str = “reference type”;Phân loại theo cách thức lưu trữ dữ liệuValue TypeChứa giá trị trực tiếpKhông thể nullPhải chứa giá trị xác địnhBao gồmPrimitive typedouble, char, int, floatEnumstruct*int i = 59;59i7.83x59adouble x = 7.83;int a = i;Reference typeChỉ tới nơi chứa dữ liệuCó thể nullnull: không chỉ tới bất kỳ đâuBao gồmLớp (class) string, objectGiao diện (interface)Mảng (array)Đại diện (delegate)*string s1 = "Hello";"Hello""Bye"s2s3s1string s2 = "Bye";string s3;s3 = s1;Value type vs. Reference typeCharacteristicValue typeReference typeVariable holdValueReferenceAllocatedStackHeapDefaultZeroNullParameterCopy valueCopy reference*identifierĐịnh danh: những từ được đặt ra để đại diện cho mọi thứ dùng trong chương trìnhKhi đặt định danh: nên có tính gợi nhớTạo ra định danh mớiHelloWorld, Program, Perform, phải khai báo trước khi sử dụngDùng định danh có sẵnConsole, WriteLine, ReadLine, phải chỉ ra nơi chứa định danh (namespace)*IdentifierBao gồm chữ cái, chữ số, ký tự gạch dướiKhông được bắt đầu bằng chữ sốChuong_Trinh, x25, z, _abc, XửLý hợp lệ2abc, Chuong-Trinh, Xu Ly, class không hợp lệPhân biệt CHỮ HOA và chữ thườngChuongTrinh và chuongtrinh là khác nhauCác định danh được khai báo trong cùng phạm vi (scope) không được trùng nhauPhải khác với từ khóa (dùng “@” khắc phục)*Keyword*ConstantMột hằng là một biến nhưng trị không thay đổi const int a = 100; // giá trị ko thể thay đổiHằng bắt buộc phải được gán giá trị lúc khai báo Trị của hằng có thể được tính toán vào lúc biên dịch Hằng bao giờ cũng static *ConstantƯu điểmChương trình dễ đọc, khắc phục những con số “magic number” trong code.Chương trình dễ sửa hơn.Tránh lỗi dễ dàng hơn, trình biên dịch sẽ báo lỗi nếu gán lại giá trị cho hằng*Minh họa sử dụng hằng*Định nghĩa hằngConstantreadonly*const: phải được gán giá trị khi khai báoreadonly: ko cần khởi tạo trước, khi gán giá trị thì sau đó ko thay đổi đượcChưa được khởi gánKo được thay đổiVariableBiến là nơi lưu dữ liệu của chương trìnhDữ liệu của biếnNằm trong bộ nhớ vật lý (physical RAM)Có thể thay đổi giá trịPhải khai báo trước khi dùngIdentifier: tên để đại diện cho biếnData type: dạng lưu trữ dữ liệu của biến*Data type identifierVariablePhạm vi (scope)Được xác định bởi cặp dấu { và }Có thể chứa phạm vi nhỏ hơnVị trí khai báo biếnTrong thân phương thức: biến cục bộTrong thân lớp(trong class): thuộc tínhBiến trong C# chỉ có tác dụng trong phạm vi mà nó được khai báo*Type castÉp kiểu: chuyển giá trị từ kiểu này sang kiểu khácVí dụChuyển từ int qua float và ngược lạiCó hai loạiÉp kiểu ngầm định (implicit type-cast)Ép kiểu chỉ định (explicit type-cast)*Implicit type castDo C# tự thực hiệnKhông cần lập trình viên can thiệpXảy ra khiÉp từ kiểu nhỏ qua kiểu lớnÉp từ lớp dẫn xuất qua lớp cơ sở*int i = 59;double x = i;string s = "Hello";object o = s;Implicit type-castFromTosbyte short, int, long, float, double, decimal byte short, ushort, int, uint, long, ulong, float, double, decimal short int, long, float, double, decimal ushort int, uint, long, ulong, float, double, decimal int long, float, double, decimal uint long, ulong, float, double, decimal long, ulong float, double, decimal float double char ushort, int, uint, long, ulong, float, double, decimal *Explicit type-castDo lập trình viên chỉ địnhXảy ra khiÉp từ kiểu lớn qua kiểu nhỏ: có thể mất giá trịÉp từ lớp cơ sở qua lớp dẫn xuất*double x = 74.86;int i = (int)x; // i = 74string s = "Hello";object o = s;string s2 = (string)o;Using Convert classThường dùng khi cần chuyển đổi giữa các kiểu không có liên hệ với nhauConvert.toDataType(SourceValue)Ví dụ: chuyển từ chuỗi sang số thực*string s1 = "56.8";double x = Convert.ToDouble(s1); // x = 56.8int i = Convert.ToInt32(s2); // i = 95string s2 = "95";byte j = Convert.ToByte(x); // j = 56, ít dùngConsole I/OĐể đọc ký tự văn bản từ cửa sổ consoleConsole.Read() giá trị trả về là intConsole.ReadLine() giá trị trả về là stringĐể xuất chuỗi ký tự dùngConsole.Write() / Console.WriteLine()*Console I/OConsole.WriteLine()*\n: ký tự xuống dòngConsole I/O*/ F5Xuất chuỗiĐọc chuỗiChờ đọc 1 dòng, mục đích là dừng màn hìnhBoxing & UnboxingKiểu giá trị có thể được chuyển thành kiểu đối tượngBoxingUnboxing *UnboxingBoxingchecked & unchecked*throws OverFlowExceptionref, out, paramref: tương tự như truyền tham chiếu trong C/C++Từ khoá ref phải được dùng lúc gọi hàmCác tham số truyền dạng ref phải được khởi tạo giá trị trước *Khai báo ref trước kiểu dữ liệusử dụng ref cho tham số khi gọi hàmref, out, paramout: tương tự như refKhác ref là ko cần khởi tạo giá trị trước khi truyền*Khai báo cho tham sốDùng trước tham số khi gọi hàmref, out, param*3 phần tử6 phần tửMảng arrayLuôn khai báo ở cuối danh sách tham số Keyword this*public class list{ private int size; ... public SetSize (int size) { this.size = size; }LoopTương tự như C: while, do while, for*Phải là giá trị bool: true, falsewhile { // phần thân while}do { // phần thân do while} while ;for( khởi tạo biến lặp; ; thay đổi biến lặp){ // phần thân for}Loop*index = 10;while (index != 0){ Console.WriteLine(index); index--;}index = 0;do{ Console.WriteLine("Happens at least once"); }while (index , trong switch*returnThoát khỏi hàm voidTrả về 1 giá trị của hàm*void Func1(int x) { if (x == 0) return; ...}int max(int a, int b) { if (a > b) return a; else return b;}ArrayChứa một số những biến có cùng kiểu dữ liệu.Truy xuất phần tử thông qua chỉ số (index)Chỉ số bắt đầu bằng 0.VDint[] myInteger = new int[5];string[] myString = {“BeMun”,”BeTien” };*Datatype[ ] array-nameArrayLấy kích thước mảng qua thuộc tính Lengthint Size = myArray.Length;Nếu thành phần của mảng là kiểu định trước, có thể dùng hàm Sort của Array để sắp xếpArray.Sort(myArray);Dùng hàm Reverse của Array để đảo thứ tự các phần tử trong mảngArray.Reverse(myArray);*Array*Dùng phương thức tĩnh Sort của lớp Array để sort artistsDùng phương thức tĩnh Reverse của lớp Array để đảo thứ tự artistsMulti-dimensional ArrayKhai báo mảng int 2 dòng 3 cộtint[,] myMatrix = new int[2,3];Có thể khởi gánint[,] myMatrix = new int[,] {{1,2},{3,4},{5,6},{7,8}};int[,] myMatrix = {{1,2},{3,4},{5,6},{7,8}};string[,] beatleName = {{"Lennon","John"}, {"McCartney","Paul"}, {"Harrison","George"}, {"Starkey","Richard"}}; *Datatype[,] array-nameMulti-dimensional Array*Truy cập tuần tự theo kiểu mảng 1 chiềuTruy cập theo dạng dòng cột qua chỉ mục i và jJagged ArrayJagged là mảng mà mỗi phần tử là một mảng có kích thước khác nhauNhững mảng con này phải được khai báo riêngKhai báo mảng 3 dòng, mỗi dòng là một mảng 1 chiều*Datatype[ ][ ] array-nameint[][] a = new int[3][];a[0] = new int[4];a[1] = new int[3];a[2] = new int[1];Khai báo số dòng, hàngKhai báo số cột riêng chotừng dòngJagged Array*Truy cập theo dòng, cộtTruy cập dùng foreachEnumerationDùng thay thế hằngTập hợp các giá trị hằng được đặt tênKhai báo trực tiếp trong namespaceLà kiểu dữ liệu*enum Color { Red, Green, Blue };enum Access { personal = 1, group = 2, all = 4 };Color c = Color.Red;Access a = Access.personal | Access.group;If ((Access.personal & a) != 0) Console.WriteLine("access granted");Sử dụngEnumerationEnumeration kế thừa từ object (Equals, ToString()).*Enumeration*SummaryCú pháp khá giống với C/C++Kiểu dữ liệu tham chiếu & giá trịTruyền tham số kiểu giá trị cho hàmType-castBoxing & UnboxingĐiều khiển lặp foreach duyệt tập hợpKiểu dữ liệu mảng*
Các file đính kèm theo tài liệu này:
- _p2_ngon_ngu_c_2009_6654.ppt