Tải bản đầy đủ (.pdf) (7 trang)

Tính kế thừa trong C | 85 bài học lập trình C hay nhất PDF

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (360.68 KB, 7 trang )

/>
Copyright © vietjack.com

Tính kế thừa trong C#
Một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng là Tính kế thừa
(Inheritance). Tính kế thừa cho phép chúng ta định nghĩa một lớp trong điều kiện một lớp khác,
mà làm cho nó dễ dàng hơn để tạo và duy trì một ứng dụng. Điều này cũng cung cấp một cơ hội
để tái sử dụng tính năng code và thời gian thực thi nhanh hơn.
Khi tạo một lớp, thay vì viết toàn bộ các thành viên dữ liệu và các hàm thành viên mới, lập trình
viên có thể nên kế thừa các thành viên của một lớp đang tồn tại. Lớp đang tồn tại này được gọi
là Base Class - lớp cơ sở, và lớp mới được xem như là Derived Class – lớp thừa kế.
Ý tưởng của tính kế thừa triển khai mối quan hệ IS-A (Là Một). Ví dụ, mammal IS A animal, dog ISA mammal, vì thế dog IS-A animal, và ....

Lớp cơ sở (Base Class) và Lớp thừa kế (Derived
Class) trong C#
Một lớp có thể được kế thừa từ hơn một lớp khác, nghĩa là, nó có thể kế thừa dữ liệu và hàm từ
nhiều Lớp hoặc Interface cơ sở.
Cú pháp để tạo lớp kế thừa trong C# là:
<acess-specifier> class <base_class>
{
...
}
class <derived_class> : <base_class>
{
...
}

Xét một lớp cơ sở Shape và lớp kế thừa Rectangle sau:
using System;
namespace InheritanceApplication
{


class Shape

Trang chia sẻ các bài học online miễn phí

Page 1


/>
Copyright © vietjack.com

{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}

// Derived class
class Rectangle: Shape
{
public int getArea()
{
return (width * height);
}

}

class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();

Rect.setWidth(5);
Rect.setHeight(7);

// Print the area of the object.
Console.WriteLine("Total area: {0}",

Rect.getArea());

Trang chia sẻ các bài học online miễn phí

Page 2


/>
Copyright © vietjack.com

Console.ReadKey();
}
}
}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:

Total area: 35

Khởi tạo Lớp cơ sở (Base Class) trong C#
Lớp kế thừa (Derived Class) trong C# kế thừa các biến thành viên và các phương thức thành viên
từ lớp cơ sở. Vì thế, đối tượng của lớp cha nên được tạo trước khi lớp phụ được tạo. Bạn có thể
cung cấp các chỉ thị để khởi tạo lớp phụ trong danh sách khởi tạo thành viên.
Chương trình ví dụ sau minh họa cách khởi tạo Lớp cơ sở (Base Class) trong C#:
using System;
namespace RectangleApplication
{
class Rectangle
{
//member variables
protected double length;
protected double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}

public double GetArea()
{
return length * width;
}

Trang chia sẻ các bài học online miễn phí

Page 3



/>
Copyright © vietjack.com

public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

class Tabletop : Rectangle
{
private double cost;
public Tabletop(double l, double w) : base(l, w)
{ }
public double GetCost()
{
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display()
{
base.Display();
Console.WriteLine("Cost: {0}", GetCost());
}
}
class ExecuteRectangle

{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}

Trang chia sẻ các bài học online miễn phí

Page 4


/>
Copyright © vietjack.com

}
}

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5

Đa kế thừa trong C#
C# không hỗ trợ đa kế thừa. Tuy nhiên, bạn có thể sử dụng Interface để triển khai đa kế thừa. Ví
dụ sau minh họa cách sử dụng Interface để triển khai đa kế thừa trong C#:
using System;
namespace InheritanceApplication

{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}

// Base class PaintCost
public interface PaintCost
{
int getCost(int area);

Trang chia sẻ các bài học online miễn phí

Page 5


/>
Copyright © vietjack.com

}


// Derived class
class Rectangle : Shape, PaintCost
{
public int getArea()
{
return (width * height);
}
public int getCost(int area)
{
return area * 70;
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();

// Print the area of the object.
Console.WriteLine("Total area: {0}",

Rect.getArea());

Console.WriteLine("Total paint cost: 0" , Rect.getCost(area));
Console.ReadKey();
}

}
}

Trang chia sẻ các bài học online miễn phí

Page 6


/>
Copyright © vietjack.com

Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
Total area: 35
Total paint cost: $2450

Trang chia sẻ các bài học online miễn phí

Page 7



×