1. Trang chủ
  2. » Công Nghệ Thông Tin

Tuan04 c net basic p3

22 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 900,38 KB

Nội dung

Lập trình Windows 9/25/2018 1 C# NET cơ bản Lập trình hướng đối tượng Lập trình Ứng dụng quản lý Nội dung  Class và thừa kế  Interface và Struct  Phân cấp dữ liệu trong NET  Truyền tham số trong C[.]

9/25/2018 Lập trình Ứng dụng quản lý C#.NET Lập trình hướng đối tượng Nội dung  Class thừa kế  Interface Struct  Phân cấp liệu NET  Truyền tham số C# 9/25/2018 Nội dung  Class thừa kế  Interface Struct  Phân cấp liệu NET  Truyền tham số C# Trừu tượng hóa liệu  Trừu tượng hóa liệu phương pháp tích hợp liệu sở kiểu liệu có sẵn nhằm mơ tả, biểu diễn khái niệm hay đối tượng giới thực  Ví dụ biểu diễn liệu thơng tin Sinh viên, Nhân viên 9/25/2018 Class  Cú pháp khai báo C# [accessmodifier] class ClassName { [accessmodifier] [datatype] fieldName; [accessmodifier] methodName(parameters); }  Thành phần class  Thành phần liệu: fields, constants  Thành phần xử lý: methods Thành phần  Thành phần instance (thể hiện) static (tĩnh)  Tùy theo liệu hay xử lý chung hay riêng cho instance  Từ khóa: static class ClassName { datatype fieldInstance; static datatype fieldStatic; datatype methodInstance(params) { } static datatype methodStatic(params) { } } 9/25/2018 Kế thừa  Cú pháp class ClassName : ClassBase { }  Trong C# cho phép kế thừa public  Trong C# cho phép đơn thừa kế  Trong C# lớp bắt buột phải thừa kế từ lớp ??? Đa hình  Cú pháp class ClassBase { public virtual datatype methodVirtual() { } } class ClassName : ClassBase { public override datatype methodVirtual() { return base.methodVirtual(); } } 9/25/2018 Abstract  C# cho phép class phương thức khai báo abstract  Một class abstract khơng có instance phương thức abstract phải overriden lớp dẫn xuất không abstract  Một phương thức abstract tự động khai báo virtual  Nếu lớp có phương thức abstract lớp abstract Sealed  C# cho phép class phương thức khai báo sealed  Một class sealed khơng cho phép kế thừa  Một phương thức sealed khơng cho phép overriden sealed class ClassBase { } class ClassName { public sealed datatype method() { } } 9/25/2018 Construction  Constructor class ClassName { public ClassName() { } }  Các contructor theo luật overloading phương thức khác  Constructor mặc định không cần cài đặt Static Constructor class ClassName { public static ClassName() { } }  Constructor static để khởi tạo thành phần static Constructor static bổ từ tầm vực truy xuất, khơng có tham số có constructor static lớp 9/25/2018 Constructor gọi constructor khác class ClassName { field1; field2; public ClassName() { field1 = default1; } class ClassName { field1; field2; public ClassName() { field1 = default1; } public ClassName(info1) { field1 = default1; field2 = info1; } } public ClassName(info1) : this() { field2 = info1; } } Constructor kế thừa class ClassBase { field1; public ClassBase(info1) { field1 = info1; } } class ClassName : ClassBase { public ClassName(info1) : base(info1) { } } 9/25/2018 Disposal  Mọi vùng nhớ cấp phát cho đối tượng NET thu gom rác (garbage collection) quản lý  C# hỗ trợ mẫu Destruction để giải vấn đề cần giải phóng sớm tài nguyên chiếm nhiều nhớ tài ngun có vùng nhớ khơng quản lý (unsafe) Gồm giai đoạn  Thực thi giao diện Dispose giải phóng tài nguyên sớm  Cài đặt Destructor để giải phóng vùng nhớ khơng quản lý Ví dụ class ClassName : IDisposable { fieldLargeMem; fieldUnsafe; public void Dispose() { giải phóng fieldLargeMem } ~ClassName() { giải phóng fieldUnsafe } } 9/25/2018 Phân biệt Close Dispose class ClassName : IDisposable { fieldLargeMem; public void Dispose() { giải phóng fieldLargeMem } public void Close() { } } Class Object  System.Object class sở cao thừa kế kiểu liệu NET  Nếu class không khai báo tường minh thừa kế class mặc định kế thừa Object  Một số phương thức định nghĩa Object: Phương thức Đặc tính Chức string ToString() public virtual Trả chuỗi mô tả đối tượng int GetHashTable() public virtual Được sử dụng dictionary 9/25/2018 Class Object (tt) Phương thức Đặc tính Chức bool Equals(object obj) public virtual So sánh thực thể đối tượng bool Equals(object objA, object objB) public static So sánh thực thể đối tượng bool ReferenceEquals(obje ct objA, object objB) public static So sánh hai tham chiếu đến đối tượng Type GetType() Public Trả chi tiết kiểu đối tượng object MemberwiseClone() Protected tạo copy đối tượng void Finalize() Protected virtual Đây dạng Destructor Net Property  Giúp truy suất an toàn thành phần liệu đối tượng class ClassName { datatype field; public datatype Field { get { return field; } set { field = value; } } } 10 9/25/2018 Property (tt)  Bản chất property method  Property đọc (readonly) hay ghi (writeonly).???  Property cài đặt virtual hay abstract Indexer class ClassI { string[] arrData; public string this[int i] { get { return arrData[i]; } set { arrData[i] = value; } } } 11 9/25/2018 Nội dung  Class thừa kế  Interface Struct  Phân cấp liệu NET  Truyền tham số C# Interface  C# hỗ trợ interface (giao diện) để thực thi đa thừa kế ???  Một interface khơng có constructor hay field  Các thành phần interface mặc định public không cho phép tầm vực truy suất khác  Các thành phần interface không phép khai báo virtual hay static 12 9/25/2018 Ví dụ interface ITest1 { void func1(); void func2(int i); } interface ITest2 { int func1(); } class CTest : ITest1, ITest2 { public void func1() { } public void func2(int t) { } int ITest2.func1() { } } Struct  Cú pháp [accessmodifier] struct structName { [accessmodifier] datatype fieldName; [accessmodifier] datatype methodName() { } }  Struct value type  Struct không hỗ trợ kế thừa  Không phép cài đặt constructor mặc định  Tầm vực truy suất mặc định public 13 9/25/2018 Nội dung  Class thừa kế  Interface Struct  Phân cấp liệu NET  Truyền tham số C# Phân cấp kiểu liệu NET 14 9/25/2018 Phân cấp kiểu liệu NET (tt)  Bất kỳ kiểu liệu dẫn xuất từ Object, định nghĩa tập phương thức thông dụng cho tất kiểu (như: ToString(), Equals(), GetHashCode(), )  Các kiểu liệu số (numerical) dẫn xuất từ System.ValueType (tự động cấp phát stack)  Kiểu liệu số có giá trị mặc định tương ứng (như MaxValue, MinValue, )  Các kiểu liệu số có phương thức hỗ trợ lấy giá trị (value) từ chuỗi (string) Parse() TryParse() Implicitly Typed Local Variables  Từ C# 3.0 cho phép khai báo biến với kiểu liệu không tường minh từ khóa var Thực chất compiler tự gán kiểu giá trị thích hợp cho biến var myInt = 0; var myBool = true; var myString = "Time, marches on ";  Giới hạn: sử dụng cho biến cục method property Phải gán giá trị khởi tạo (≠ null) cho biến 15 9/25/2018 Nội dung  Class thừa kế  Interface Struct  Phân cấp liệu NET  Truyền tham số C# Truyền tham số cho phương thức Dạng tham số Ý nghĩa Khơng kèm theo từ khóa bổ trợ Tham số truyền giá trị (value), nghĩa phương thức gọi nhận liệu gốc Đi kèm từ khóa out Tham số phải gán giá trị phương thức gọi nhận tham số Đi kèm từ khóa ref Tham số gán lại giá trị phương thức điều khơng bắt buộc Đi kèm từ khóa params Cho phép truyền biến thiên số lượng tham số với cách khai báo tham số 16 9/25/2018 Ví dụ truyền tham số thơng thường static int Add(int x, int y) { int ans = x + y; x = 10000; y = 88888; return ans; } static void Main(string[] args) { int x = 9, y = 10; Console.WriteLine("Before call: X: {0}, Y: {1}", x, y); Console.WriteLine("Answer is: {0}", Add(x, y)); Console.WriteLine("After call: X: {0}, Y: {1}", x, y); } Before call: X: 9, Y: 10 Answer is: 19 After call: X: 9, Y: 10 Ví dụ truyền tham số với out static void Add(int x, int y, out int ans) { ans = x + y; } static void Main(string[] args) { int ans; Add(90, 90, out ans); Console.WriteLine("90 + 90 = {0}", ans); } static void ThisWontCompile(out int a) { Console.WriteLine("Error! Forgot to assign output arg!"); } 17 9/25/2018 Ví dụ truyền tham số với ref static void SwapStrings(ref string s1, ref string s2) { string tempStr = s1; s1 = s2; s2 = tempStr; } static void Main(string[] args) { string str1 = "Flip"; string str2 = "Flop"; Console.WriteLine("Before: {0}, {1} ", str1, str2); SwapStrings(ref str1, ref str2); Console.WriteLine("After: {0}, {1} ", str1, str2); } Before: Flip, Flop After: Flop, Flip Ví dụ truyền tham số với params static double CalculateAverage(params double[] values) { Console.WriteLine("You sent me {0} doubles.", values.Length); double sum = 0; if (values.Length == 0) return sum; for (int i = 0; i < values.Length; i++) sum += values[i]; return (sum / values.Length); } 18 9/25/2018 Ví dụ truyền tham số với params (tt) static void Main(string[] args) { double average; average = CalculateAverage(4.0, 3.2, 5.7, 64.22, 87.2); Console.WriteLine("Average of data is: {0}", average); double[] data = { 4.0, 3.2, 5.7 }; average = CalculateAverage(data); Console.WriteLine("Average of data is: {0}", average); Console.WriteLine("Average of data is: {0}", CalculateAverage()); } You sent me doubles Average of data is: 32.864 You sent me doubles Average of data is: 4.3 You sent me doubles Average of data is: Phân biệt kiểu tham số kiểu liệu struct STest { public int X, Y; } class CTest { public int X, Y; } static void Func1(STest s, CTest c) { s.X = c.X = 10; } static void Func2(ref STest s, ref CTest c) { s.X = c.X = 10; } 19 9/25/2018 Phân biệt kiểu tham số kiểu liệu (tt) static void Main(string[] args) { var s = new STest(); var c = new CTest(); Console.WriteLine("s.X= {0}, c.X= {1}", s.X, c.X); Func1(s, c); Console.WriteLine("Sau Func1: s.X= {0}, c.X= {1}", s.X, c.X); Func2(ref s, ref c); Console.WriteLine("Sau Func2: s.X= {0}, c.X= {1}", s.X, c.X); } s.X= 0, c.X= Sau Func1: s.X= 0, c.X= 10 Sau Func2: s.X= 10, c.X= 10 Phân biệt kiểu tham số kiểu liệu (tt) static void { s = new c = new } static void { s = new c = new } Func3(STest s, CTest c) STest() { X = }; CTest() { X = }; Func4(ref STest s, ref CTest c) STest() { X = }; CTest() { X = }; static void Main(string[] args) { var s = new STest(); var c = new CTest(); Console.WriteLine("s.X= {0}, c.X= {1}", s.X, c.X); Func3(s, c); Console.WriteLine("Sau Func3: s.X= {0}, c.X= {1}", s.X, c.X); Func4(ref s, ref c); Console.WriteLine("Sau Func4: s.X= {0}, c.X= {1}", s.X, c.X); } 20

Ngày đăng: 09/04/2023, 06:29

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN