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[.]
Trang 1C#.NET cơ bảnLậ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#
Trang 2Nộ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#
Trừu tượng hóa dữ liệu
Trừu tượng hóa dữ liệu là một phương pháp tích
hợp các dữ liệu cơ sở hoặc kiểu dữ liệu có sẵn
nhằm mô tả, biểu diễn một khái niệm hay một đối
tượng trong thế giới thực
Ví dụ biểu diễn dữ liệu thông tin một Sinh viên,
một Nhân viên.
Trang 3 Cú pháp khai báo trong C#
[accessmodifier] class ClassName
Thành phần instance (thể hiện) và static (tĩnh)
Tùy theo dữ liệu hay xử lý là chung hay riêng cho mỗi
static datatype fieldStatic ;
datatype methodInstance ( params )
Trang 4 Trong C# chỉ cho phép kế thừa public.
Trong C# chỉ cho phép đơn thừa kế
Trong C# một lớp bắt buột phải thừa kế từ một lớp
Trang 5 C# cho phép cả class và phương thức có thể khai
báo abstract.
Một class abstract không có instance và một
phương thức abstract phải được overriden trong
bất kỳ lớp dẫn xuất không abstract nào
Một phương thức abstract sẽ tự động được khai
Một class sealed thì không cho phép kế thừa.
Một phương thức sealed thì không cho phép
Trang 6 Constructor staticđể khởi tạo các thành phần
static Constructor statickhông có bổ từ tầm vực
truy xuất, không có bất kỳ một tham số nào và chỉ
có duy nhất một constructor static trong một lớp.
Trang 7Constructor gọi constructor khác
field2;
public ClassName() {
field1 = default1;
}
public ClassName(info1) : this ()
{ field2 = info1;
} }
Constructor trong kế thừa
Trang 8 Mọi vùng nhớ cấp phát cho đối tượng trong NET
đều được bộ thu gom rác (garbage collection)
quản lý
C# hỗ trợ mẫu Destruction để giải quyết vấn đề
cần giải phóng sớm các tài nguyên chiếm nhiều
bộ nhớ hoặc các tài nguyên có vùng nhớ không
được quản lý (unsafe) Gồm 2 giai đoạn
Thực thi giao diện Dispose giải phóng tài nguyên
~ ClassName ()
{
giải phóng fieldUnsafe }
}
Trang 9Phân biệt Close và Dispose
class ClassName : IDisposable
System.Object là class cơ sở cao nhất trong cây
thừa kế các kiểu dữ liệu của NET
Nếu class không được khai báo tường minh thừa
kế bất kỳ class nào thì mặc định kế thừa Object.
Một số phương thức được định nghĩa trong
Object:
Phương thức Đặc tính Chức năng
string ToString() public virtual Trả về một chuỗi mô tả của đối
tượng int GetHashTable() public virtual Được sử dụng trong dictionary
Trang 10Class Object (tt)
Phương thức Đặc tính Chức năng
bool Equals(object obj) public virtual So sánh các thực thể của đối
tượng bool Equals(object
objA, object objB) public static
So sánh các thực thể của đối tượng
bool
ReferenceEquals(obje
ct objA, object objB)
public static So sánh hai sự tham chiếu đến
một đối tượng
Type GetType() Public Trả về chi tiết kiểu của một đối
tượng object
set {
field = value ; }
}
}
Trang 11Property (tt)
Bản chất của property là method.
Propertychỉ đọc (readonly) hay chỉ ghi
} set {
arrData [ ] = value ; }
}
Trang 12Nộ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#
Các thành phần trong interface không được
phép khai báo virtual hay static.
Trang 13} public void func2 ( int t
{
} int ITest2 func1 () {
} }
Struct
Cú pháp
[accessmodifier] struct structName
{
[accessmodifier] datatype fieldName ;
[accessmodifier] datatype methodName ()
{
}
}
Struct là value type.
Structkhông hỗ trợ kế thừa
Không được phép cài đặt constructor mặc định.
Tầm vực truy suất mặc định là public.
Trang 14Nộ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#
Phân cấp kiểu dữ liệu trong NET
Trang 15Phân cấp kiểu dữ liệu trong NET (tt)
Bất kỳ kiểu dữ liệu nào cũng được dẫn xuất từ
Object, được định nghĩa tập các phương thức
thông dụng cho tất cả các kiểu (như: ToString(),
Equals(), GetHashCode(), ).
Các kiểu dữ liệu số (numerical) dẫn xuất từ
System.ValueType (tự động cấp phát trên
stack).
Kiểu dữ liệu số có các giá trị mặc định tương ứng
(như MaxValue, MinValue, )
Các kiểu dữ liệu số có phương thức hỗ trợ lấy giá
trị (value) từ chuỗi (string) đó là Parse() và
TryParse().
Implicitly Typed Local Variables
Từ C# 3.0 cho phép khai báo biến với kiểu dữ
liệu không tường minh bằng từ khóa var Thực
chất compiler sẽ 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: chỉ sử dụng cho biến cục bộ trong
method hoặc property Phải gán giá trị khởi tạo
(≠ null) cho biến
Trang 16Nộ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#
Truyền tham số cho phương thức
Không kèm theo từ khóa bổ trợ Tham số được truyền bằng giá trị
(value), nghĩa là phương thức được gọi nhận một bản sao của dữ liệu gốc
Đi kèm từ khóa out Tham sốphảiđược gán giá trị bởi
phương thức được gọi nhận tham số.
Đi kèm từ khóa ref Tham số có thể được gán lại giá trị
trong phương thức và điều này là không bắt buộc
Đi kèm từ khóa params Cho phép truyền biến thiên về số
lượng tham số với cách khai báo như là 1 tham số
Trang 17Ví dụ truyền tham số thông thường
static int Add( int x , int y
Console.WriteLine( "Before call: X: {0}, Y: {1}" , x , y );
Console.WriteLine( "Answer is: {0}" , Add( , 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 )
Add (90, 90, out ans );
Console.WriteLine( "90 + 90 = {0}" , ans );
Trang 18Ví dụ truyền tham số với ref
static void SwapStrings ( ref string s1 , ref string s2 )
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 )
Trang 19Ví dụ truyền tham số với params (tt)
static void Main( string [] args )
average = CalculateAverage( data );
Console.WriteLine( "Average of data is: {0}" , average );
Console.WriteLine( "Average of data is: {0}" ,
CalculateAverage());
}
You sent me 5 doubles.
Average of data is: 32.864
You sent me 3 doubles.
Average of data is: 4.3
You sent me 0 doubles.
Average of data is: 0
Phân biệt kiểu tham số và kiểu dữ liệu
Trang 20Phân biệt kiểu tham số và kiểu dữ 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( , 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= 0
Sau Func1: s.X= 0, c.X= 10
Sau Func2: s.X= 10, c.X= 10
Phân biệt kiểu tham số và kiểu dữ liệu (tt)
static void Func3 ( STest s , CTest c
var s = new STest ();
var c = new CTest ();
Console.WriteLine( "s.X= {0}, c.X= {1}" , s X , c X );
Func3( , 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 );
}
Trang 21Phân biệt kiểu tham số và kiểu dữ liệu (tt)
Chỉ sử dụng được với reference type???
bool b = null ; //compiler error!
int i = null ; //compiler error!
string s = null ; //OK!
Sử dụng Nullable type
bool ? b = null ; //OK!
int ? i = null ; //OK!
string s = null ; //OK!
Ý nghĩa sử dụng???
Trang 22 Chương trình nhập vào họ tên, điểm toán, điểm
văn của học sinh Tính điểm trung bình và xuất
kết quả
Viết chương trình tính tổng lương công ty phải
trả cho Nhân viên biết Nhân viên trong công
ty được lĩnh lương theo các dạng khác nhau:
Người lao động hưởng lương từ ngân sách Nhà
nước gọi là cán bộ, công chức (dạng biên chế)
Người lao động lĩnh lương từ ngân sách gọi là
người làm hợp đồng
Viết chương trình tính diện tích (thể tích), chu vi
(diện tích xung quanh) danh sách các hình: Chữ
nhật, Vuông, Tròn, Lập phương, Hình Hộp, Hình
Cầu