Bài tập thực hành C# 5
Nội dung thực hành
- Tính kế thừa (Inheritance)
- Tính đa hình (Polymorphism)
Bài tập
Bài 1: Thừa kế
Khởi tạo một class có tên Person và hai class con là Student and Employee. Tạo 2 class Faculty và Staff là class con của class Employee. Person có các thuộc tính tên, số điện thoại và địa chỉ email. Student có thuộc tính: môn học (Kinh doanh, Khoa học Máy tính ...). Employee có các thuộc tính: bộ phận công tác, tiền lương và ngày làm việc. Một Faculty có các thuộc tính: giờ làm việc và xếp loại. Một Staff có thuộc tính: tiêu đề. Bạn được yêu cầu:
- Ghi đè ToString () để hiển thị tên lớp và tên, địa chỉ email của Student.
- Sử dụng property để cung cấp khả năng đọc và ghi giá trị cho các thuộc tính.
- Faculty(Giảng viên) nhận được 1000 + 0,05 * Tiền lương và Staff(Nhân viên) nhận được 0,06 * Tiền lương
- Faculty (Giảng viên) được 5 tuần nghỉ phép nếu làm việc trên 3 năm và thêm một tuần nếu là "Giảng viên cao cấp". Nếu không thì 4 tuần. Staff(Nhân viên) được nghỉ phép 4 tuần nếu công tác trên 5 năm. Nếu không được 3 tuần
Bài 2: Viết một chương trình với thiết kế được thể hiện dưới đây
Bài 3: Xây dựng lớp cha Shape
và các lớp con của nó (Circle
, Rectangle
và Square
) như sơ đồ lớp bên dưới
Tạo lớp cha tên là Shape
(như trong sơ đồ lớp trên) chứa:
- 2 trường dữ liệu tên là
color
(string
) vàfilled
(bool
) - 2 phương thức khởi tạo: 1 cái không có tham số truyền vào với 2 giá trị khởi tạo mặc định cho
color
là “green” vàfilled
làtrue
và 1 có 2 tham số để truyền vào các giá trị khác nhau chocolor
vàfilled
- Các phương thức getter và setter cho các trường dữ liệu private của lớp
Shape
- 1 phương thức
toString()
trả về thông tin của đối tượngShape
“A Shape with color of xxx and filled/Not filled
“
Viết 1 lớp chính chứa phương thức main tên là ShapeDemo
(ShapeDemo.cs) để kiểm tra các phương thức đã định nghĩa trong lớp Shape
.
Tiếp tục, các bạn hãy tạo 2 lớp con của lớp Shape
tên là Circle
và Rectangle
như trong sơ đồ lớp ở trên.
Lớp Circle
chứa:
- 1 trường dữ liệu tên là
radius
(double
). - 3 phương thức khởi tạo, trong đó có 1 cái không có tham số và khởi tạo giá trị của radius là
1.0
- Các phương thức getter và setter cho trường dữ liệu
radius
- Phương thức
getArea()
vàgetPerimeter()
- Ghi đè phương thức
toString()
của lớp cha để trả về thông tin “A Circle with radius=xxx, which is a subclass of yyy
“, trong đóyyy
kết quả trả về của phương thứctoString()
từ lớp cha
Lớp Rectangle
chứa:
- 2 trường dữ liệu
width
(double
) vàlength
(double
) - 3 phương thức khởi tạo, trong đó 1 cái không có tham số khởi tạo giá trị
width
vàlength
là1.0
- Các phương thức getter và setter cho các trường dữ liệu
- Phương thức
getArea()
vàgetPerimeter()
- Ghi đè phương thức
toString()
của lớp cha để trả về thông tin “A Rectangle with width=xxx and length=zzz, which is a subclass of yyy
“, trong đóyyy
kết quả trả về của phương thứctoString()
từ lớp cha
Xây dựng tiếp lớp Square
là lớp con của lớp Rectangle
. Lớp Square
không có các trường dữ liệu của riêng nó mà sẽ thừa kế các trường dữ liệu từ lớp cha Rectangle. Lớp Square chứa:
- 3 phương thức khởi tạo trong đó có 1 phương thức sẽ thừa kế tới phương thức khởi tạo của lớp cha. Gợi ý:
public Square(double width, double height):base(width, height) { // Call superclass Rectangle(width, height) }
- Ghi đè phương thức
toString()
của lớp cha để trả về thông tin “A Square with side=xxx, which is a subclass of yyy
“, trong đóyyy
kết quả trả về của phương thứctoString()
từ lớp cha - Bạn thử xem xét xem có cần ghi đè phương thức
getArea()
vàgetPerimeter()
của lớp cha hay không? - Ghi đè phương thức
setLength()
vàsetWidth()
để thay đổi cảwidth
vàlength
, để duy trì hình dạng hình vuông