lớp (class) trong c# · lớp (class) trong c# khi bạn định nghĩa một lớp (class) trong...

12
http://vietjack.com/csharp/index.jsp Copyright © vietjack.com http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều này không thực sự định nghĩa bất kỳ dữ liệu nào, nhưng nó định nghĩa ý nghĩa của tên lớp đó. Tức là, một đối tượng của lớp đó gồm những cái gì, các hoạt động nào có thể được thực hiện trên đối tượng đó. Các đối tượng là instance (sự thể hiện) của một lớp. Các phương thức và các biến mà cấu tạo nên một lớp được gọi là các thành viên của lớp đó. Định nghĩa mộ t Class trong C# Một định nghĩa lớp trong C# bắt đầu với từ khóa class được theo sau bởi tên lớp; và phần thân lớp được bao quanh bởi các dấu ngoặc ôm. Dưới đây là form chung của một định nghĩa lớp trong C#: <access specifier> class class_name { // member variables <access specifier> <data type> variable1; <access specifier> <data type> variable2; ... <access specifier> <data type> variableN; // member methods <access specifier> <return type> method1(parameter_list) { // method body } <access specifier> <return type> method2(parameter_list) { // method body } ... <access specifier> <return type> methodN(parameter_list) { // method body } }

Upload: others

Post on 20-Jul-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1

Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu.

Điều này không thực sự định nghĩa bất kỳ dữ liệu nào, nhưng nó định nghĩa ý nghĩa của tên lớp

đó. Tức là, một đối tượng của lớp đó gồm những cái gì, các hoạt động nào có thể được thực hiện

trên đối tượng đó. Các đối tượng là instance (sự thể hiện) của một lớp. Các phương thức và các

biến mà cấu tạo nên một lớp được gọi là các thành viên của lớp đó.

Định nghĩa một Class trong C# Một định nghĩa lớp trong C# bắt đầu với từ khóa class được theo sau bởi tên lớp; và phần thân lớp

được bao quanh bởi các dấu ngoặc ôm. Dưới đây là form chung của một định nghĩa lớp trong C#:

<access specifier> class class_name

{

// member variables

<access specifier> <data type> variable1;

<access specifier> <data type> variable2;

...

<access specifier> <data type> variableN;

// member methods

<access specifier> <return type> method1(parameter_list)

{

// method body

}

<access specifier> <return type> method2(parameter_list)

{

// method body

}

...

<access specifier> <return type> methodN(parameter_list)

{

// method body

}

}

Page 2: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 2

Ghi chú:

Access specifier xác định các qui tắc truy cập cho các thành viên cũng như chính lớp đó.

Nếu không được đề cập, thì Access Specifier mặc định cho một kiểu lớp làinternal. Chế độ

truy cập mặc định cho các thành viên là private.

Data type xác định kiểu biến, và trả về kiểu dữ liệu mà phương thức trả về.

Để truy cập các thành viên lớp, bạn sử dụng toán tử dot (.).

Toán tử dot (.) liên kết với tên của một đối tượng với tên của một thành viên.

Ví dụ sau minh họa các khái niệm về lớp trong C# được đề cập ở trên:

using System;

namespace BoxApplication

{

class Box

{

public double length; // Length of a box

public double breadth; // Breadth of a box

public double height; // Height of a box

}

class Boxtester

{

static void Main(string[] args)

{

Box Box1 = new Box(); // Declare Box1 of type Box

Box Box2 = new Box(); // Declare Box2 of type Box

double volume = 0.0; // Store the volume of a box here

// box 1 specification

Box1.height = 5.0;

Box1.length = 6.0;

Box1.breadth = 7.0;

Page 3: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 3

// box 2 specification

Box2.height = 10.0;

Box2.length = 12.0;

Box2.breadth = 13.0;

// volume of box 1

volume = Box1.height * Box1.length * Box1.breadth;

Console.WriteLine("Volume of Box1 : {0}", volume);

// volume of box 2

volume = Box2.height * Box2.length * Box2.breadth;

Console.WriteLine("Volume of Box2 : {0}", volume);

Console.ReadKey();

}

}

}

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

Volume of Box1 : 210

Volume of Box2 : 1560

Hàm thành viên và tính đóng gói trong C# Một hàm thành viên trong C# của một lớp là một hàm mà có định nghĩa và nguyên mẫu (prototype)

của nó bên trong định nghĩa lớp tương tự như bất kỳ biến nào khác. Nó hoạt động trên bất kỳ đối

tượng nào của lớp mà nó là thành viên và có truy cập tới tất cả thành viên của một lớp cho đối

tượng đó.

Các biến thành viên là các thuộc tính của một đối tượng (từ bối cảnh thiết kế) và chúng được giữ

private để triển khai tính đóng gói. Những biến này chỉ có thể được truy cập bởi sử dụng các hàm

thành viên public.

Ví dụ sau minh họa cách sử dụng các khái niệm trên để thiết lập và lấy giá trị của các thành viên

khác nhau trong một lớp:

using System;

Page 4: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 4

namespace BoxApplication

{

class Box

{

private double length; // Length of a box

private double breadth; // Breadth of a box

private double height; // Height of a box

public void setLength( double len )

{

length = len;

}

public void setBreadth( double bre )

{

breadth = bre;

}

public void setHeight( double hei )

{

height = hei;

}

public double getVolume()

{

return length * breadth * height;

}

}

class Boxtester

{

static void Main(string[] args)

{

Box Box1 = new Box(); // Declare Box1 of type Box

Box Box2 = new Box();

double volume;

Page 5: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 5

// Declare Box2 of type Box

// box 1 specification

Box1.setLength(6.0);

Box1.setBreadth(7.0);

Box1.setHeight(5.0);

// box 2 specification

Box2.setLength(12.0);

Box2.setBreadth(13.0);

Box2.setHeight(10.0);

// volume of box 1

volume = Box1.getVolume();

Console.WriteLine("Volume of Box1 : {0}" ,volume);

// volume of box 2

volume = Box2.getVolume();

Console.WriteLine("Volume of Box2 : {0}", volume);

Console.ReadKey();

}

}

}

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

Volume of Box1 : 210

Volume of Box2 : 1560

Constructor trong C# Một constructor của một Class, là một hàm thành viên đặc biệt của một lớp, được thực thi bất cứ

khi nào chúng ta tạo các đối tượng mới của lớp đó.

Page 6: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 6

Một constructor có tên giống như tên lớp và nó không có bất kỳ kiểu trả về nào. Dưới đây là ví dụ

minh họa khái niệm constructor trong C#:

using System;

namespace LineApplication

{

class Line

{

private double length; // Length of a line

public Line()

{

Console.WriteLine("Object is being created");

}

public void setLength( double len )

{

length = len;

}

public double getLength()

{

return length;

}

static void Main(string[] args)

{

Line line = new Line();

// set line length

line.setLength(6.0);

Console.WriteLine("Length of line : {0}", line.getLength());

Console.ReadKey();

}

Page 7: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 7

}

}

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

Object is being created

Length of line : 6

Một constructor mặc định trong C# không có bất kỳ tham số nào, nhưng nếu bạn cần, một

constructor có thể có tham số. Những constructor này được gọi là constructor được tham số

hóa. Kỹ thuật này giúp bạn gán giá trị khởi đầu cho một đối tượng tại thời điểm tạo ra nó, như

trong ví dụ sau:

using System;

namespace LineApplication

{

class Line

{

private double length; // Length of a line

public Line(double len) //Parameterized constructor

{

Console.WriteLine("Object is being created, length = {0}", len);

length = len;

}

public void setLength( double len )

{

length = len;

}

public double getLength()

{

return length;

}

static void Main(string[] args)

Page 8: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 8

{

Line line = new Line(10.0);

Console.WriteLine("Length of line : {0}", line.getLength());

// set line length

line.setLength(6.0);

Console.WriteLine("Length of line : {0}", line.getLength());

Console.ReadKey();

}

}

}

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

Object is being created, length = 10

Length of line : 10

Length of line : 6

Destructor trong C# Một destructor trong C#, là một hàm thành viên đặc biệt của một lớp, được thực thi bất cứ khi nào

một đối tượng của lớp đó thoát ra khởi phạm vi. Một destructor có tên giống tên lớp với một dẫu

ngã (~) ở trước và nó có thể: không trả về một giá trị hoặc không nhận bất kỳ tham số nào.

Destructor trong C# có thể rất hữu ích để giải phóng tài nguyên bộ nhớ trước khi thoát khỏi chương

trình. Destructor không thể bị kế thừa hoặc nạp chồng.

Ví dụ sau minh họa khái niệm về destructor trong C#:

using System;

namespace LineApplication

{

class Line

{

private double length; // Length of a line

public Line() // constructor

{

Page 9: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 9

Console.WriteLine("Object is being created");

}

~Line() //destructor

{

Console.WriteLine("Object is being deleted");

}

public void setLength( double len )

{

length = len;

}

public double getLength()

{

return length;

}

static void Main(string[] args)

{

Line line = new Line();

// set line length

line.setLength(6.0);

Console.WriteLine("Length of line : {0}", line.getLength());

}

}

}

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

Object is being created

Length of line : 6

Object is being deleted

Page 10: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 10

Thành viên Static của một Class trong C# Chúng ta có thể định nghĩa các thành viên lớp là static bởi sử dụng từ khóa static trong C#. Khi

chúng ta khai báo một thành viên lớp là static, nghĩa là, dù cho có bao nhiêu đối tượng của lớp

được tạo, thì chỉ có một bản sao của thành viên static.

Từ khóa static ngụ ý rằng chỉ có một instance (sự thể hiện) của thành viên tồn tại cho một lớp đó.

Các biến static được sử dụng để định nghĩa các hằng số (constant) bởi vì giá trị của chúng có thể

được thu nhận bằng việc gọi lớp đó mà không cần tạo một instance của nó. Các biến static có thể

được khởi tạo bên ngoài hàm thành viên hoặc định nghĩa lớp. Bạn cũng có thể khởi tạo các biến

static bên trong định nghĩa lớp.

Ví dụ sau minh họa cách sử dụng của các biến static trong C#:

using System;

namespace StaticVarApplication

{

class StaticVar

{

public static int num;

public void count()

{

num++;

}

public int getNum()

{

return num;

}

}

class StaticTester

{

static void Main(string[] args)

{

StaticVar s1 = new StaticVar();

StaticVar s2 = new StaticVar();

Page 11: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 11

s1.count();

s1.count();

s1.count();

s2.count();

s2.count();

s2.count();

Console.WriteLine("Variable num for s1: {0}", s1.getNum());

Console.WriteLine("Variable num for s2: {0}", s2.getNum());

Console.ReadKey();

}

}

}

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

Variable num for s1: 6

Variable num for s2: 6

Bạn cũng có thể khai báo một hàm thành viên là static. Những hàm này chỉ có thể truy cập

các biến static. Hàm static có thể tồn tại trước cả khi đối tượng được tạo. Ví dụ sau minh họa

cách sử dụng của hàm static trong C#:

using System;

namespace StaticVarApplication

{

class StaticVar

{

public static int num;

public void count()

{

num++;

}

public static int getNum()

{

return num;

Page 12: Lớp (Class) trong C# · Lớp (Class) trong C# Khi bạn định nghĩa một lớp (class) trong C#, bạn định nghĩa một blueprint cho một kiểu dữ liệu. Điều

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 12

}

}

class StaticTester

{

static void Main(string[] args)

{

StaticVar s = new StaticVar();

s.count();

s.count();

s.count();

Console.WriteLine("Variable num: {0}", StaticVar.getNum());

Console.ReadKey();

}

}

}

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

Variable num: 3