30/09/2018, 21:43
Hỏi về tính trừu tượng trong c#
mọi người có thể giải thích một cách đơn giản nhất nó là gì có được không vậy
mình có đoạn code sau đây
using System;
namespace PolymorphismApplication
{
abstract class Shape
{
public abstract int area();
}
class Rectangle: Shape
{
private int length;
private int width;
public Rectangle( int a=0, int b=0)
{
length = a;
width = b;
}
public override int area ()
{
Console.WriteLine("Rectangle class area :");
return (width * length);
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine("Area: {0}",a);
Console.ReadKey();
}
}
}
có hai dòng mình chưa được hiểu lắm à
abstract public int Area();
tác dụng của hàm này để làm gì vậy
dòng thứ 2 là :
public Rectangle( int a=0, int b=0)
{
length = a;
width = b;
}
cái này để làm gì vậy mọi người mình cảm ơn
Bài liên quan
Ví dụ bạn có 2 class là Rectangle class và Square class cả hai đều cùng có phương thức tính diện tích, nhưng công thức tính diện tích của hình vuông và hình chữ nhật sẽ khác nhau nên dẫn đến việc bạn sẽ phải khai báo một phương thức trừu tượng để dùng cho cả hai class trên
public abstract int area();
bạn nhìn code bên dưới sẽ hiểu rõ hơnNhư bạn đã thấy thì cả 2 hai class Rectangle và Square đều có nhu cầu tính diện tích nhưng cách tính diện tích của mỗi class sẽ khác nhau.
Rectangle = length * width
. còn với Square thì tính chất của nó là 4 cạnh bằng nhau nên công thức làSquare = width * width
Đoạn code này:
đơn giản chỉ là bạn khai báo 2 biến length và width và khởi tạo một Constuctor để truyền tham số vào 2 biến đó. Khi đó ở class program bạn chỉ việc khởi tạo đối tượng và truyền vào những tham số với giá trị cụ thể
Rectangle rectangle = new Rectangle(5, 10);
nghĩa là lúc này
length = 5 và width = 10
Bạn ghé những bài học này để rõ hơn nhé
tức là một method sẽ có nhiều chức năng đúng không anh theo ý em hiểu nó cứ như là hàm rỗng ý bao giờ cần dùng thì minh lại viết chức năng cho hàm đó anh nhỉ
bạn cứ tạm hiểu là … ví dụ máy bay trực thăng và máy bay phản lực. Cả 2 đều có chức năng chung là bay. nhưng cách bay của mỗi loại máy bay sẽ khác nhau. Trực thăng thì bay thẳng lên không cần lấy đà, còn máy bay phản lực cần phải lấy đà trên đường băng trước khi bay.
Làm như vậy bạn chỉ cần mở rộng một phương thức có sẵn là “bay” cho các class con. Giả sử sau này bạn có thêm class tên lửa thì cách bay tên lửa cũng sẽ khác, vì thể abstract class sinh ra để làm như vậy. Viết 1 lần dùng cho nhiều class con có cùng chức năng nhưng có thể mở rộng phương thức đó phù hợp với từng đặc tính của lớp con đó.
a cho e hỏi tính trừu tượng là như thế này, vậy nếu đa hình thì như thế nào ạ?
Cũng là cùng phương thức nhưng khác tham số truyền vào ạ?
giải thích tường tận thì khá mất thời gian, trên mạng cũng có nhiều bài viết nói về abstract class và interface. Bạn tham khảo ở đây https://yinyangit.wordpress.com/2012/01/15/oop-interface-vs-abstract-class/