Bài tập - Gọi các phương pháp của lớp .NET
- 12 phút
Cho dù bạn có nhận ra điều đó hay không, bạn đã gọi các phương pháp C# kể từ khi ứng dụng "Xin chào, Thế giới!" đầu tiên của bạn. Ứng dụng đó sử dụng phương WriteLine()
pháp của lớp Console
để hiển thị thông báo "Xin chào, Thế giới!".
Tuy nhiên, không phải tất cả các lớp học và phương pháp đều được thực hiện giống nhau. Bài viết này bao gồm một số biến thể phổ biến nhất mà bạn cần hiểu khi sử dụng các phương pháp từ Thư viện Lớp .NET. Quan trọng hơn, bạn sẽ tìm hiểu cách tìm và sử dụng tài liệu để hiểu rõ hơn về từng phương pháp.
Cách thức gọi phương thức trong Thư viện Lớp học .NET
Từ kinh nghiệm trước đây của bạn với Console.WriteLine()
phương pháp, bạn đã biết những điều cơ bản:
- Bắt đầu bằng cách nhập tên lớp. Trong trường hợp này, tên lớp là
Console
. - Thêm toán tử truy nhập của thành viên, biểu
.
tượng. - Thêm tên của phương thức. Trong trường hợp này, tên của phương thức là
WriteLine
. - Thêm toán tử gọi phương thức, là một tập hợp các dấu ngoặc đơn
()
. - Cuối cùng, hãy xác định các đối số được truyền vào phương thức, nếu có bất kỳ dấu ngoặc đơn nào của toán tử gọi phương thức. Trong trường hợp này, bạn chỉ định văn bản mà bạn muốn phương
Console.WriteLine()
pháp ghi vào bảng điều khiển (ví dụ,"Hello World!"
).
Hoặc, tùy thuộc vào cách các nhà phát triển thiết kế và triển khai phương pháp nhất định, bạn cũng có thể cần:
- Truyền các giá trị bổ sung làm tham số đầu vào.
- Chấp nhận giá trị trả về.
Trong đơn vị tiếp theo, bạn sẽ kiểm tra làm thế nào để vượt qua các giá trị đầu vào để một phương pháp, và làm thế nào một phương pháp có thể được sử dụng để trả về một giá trị cho thói quen gọi điện thoại.
Mặc dù một số phương pháp có thể được Console.WriteLine()
gọi giống như cách bạn gọi, nhưng có các phương pháp khác trong Thư viện Lớp .NET yêu cầu cách tiếp cận khác.
Chuẩn bị môi trường mã hóa của bạn
Mô-đun này bao gồm các hoạt động mã hóa hướng dẫn bạn qua quy trình xây dựng và chạy mã mẫu. Bạn được khuyến khích hoàn thành các hoạt động này bằng cách sử dụng Visual Studio Code làm môi trường phát triển của mình. Sử dụng Visual Studio Code cho các hoạt động này sẽ giúp bạn viết và chạy mã thoải mái hơn trong môi trường nhà phát triển được các chuyên gia trên toàn thế giới sử dụng.
Mở Mã Visual Studio.
Bạn có thể sử dụng menu Bắt đầu của Windows (hoặc tài nguyên tương đương cho một HĐH khác) để mở Mã Visual Studio.
Trên menu Mã Visual Studio tệp, chọn mở thư mục.
Trong hộp thoại mở thư, dẫn hướng đến thư mục Trên máy tính chạy Windows.
Nếu bạn có một vị trí thư mục khác nơi bạn giữ các dự án mã, bạn có thể sử dụng vị trí thư mục đó để thay thế. Đối với khóa đào tạo này, điều quan trọng là phải có một vị trí dễ tìm và ghi nhớ.
Trong hộp Mở Thư mục, hãy chọn Chọn Thư mục.
Nếu bạn thấy một hộp thoại bảo mật hỏi xem bạn có tin cậy tác giả hay không, hãy chọn Có.
Trên menu Thiết bị đầu cuối Visual Studio, hãy chọn thiết bị đầu cuối.
Lưu ý rằng dấu nhắc lệnh trong pa-nen Đầu cuối sẽ hiển thị đường dẫn thư mục cho thư mục hiện tại. Chẳng hạn:
C:\Users\someuser\Desktop>
Lưu ý
Nếu bạn đang làm việc trên PC của riêng mình chứ không phải trong một hộp cát hoặc môi trường được lưu trữ và bạn đã hoàn thành các mô-đun Microsoft Learn khác trong chuỗi C# này, bạn có thể đã tạo một thư mục dự án cho các mẫu mã. Nếu vậy, bạn có thể bỏ qua bước tiếp theo, được sử dụng để tạo ứng dụng bảng điều khiển trong thư mục TestProject.
Tại dấu nhắc lệnh Thiết bị đầu cuối, để tạo ứng dụng bảng điều khiển mới trong thư mục được chỉ định, hãy nhập lời nhắc sau:
dotnet new console -o ./CsharpProjects/TestProject
Lệnh .NET CLI này sử dụng mẫu chương trình .NET để tạo dự án ứng dụng bảng điều khiển C# mới trong vị trí thư mục được chỉ định. Lệnh này tạo ra các thư mục CsharpProjects và TestProject cho bạn và sử dụng TestProject làm tên tệp của
.csproj
bạn.Nếu một thông báo hiển thị cho bạn biết rằng các tệp đã tồn tại, hãy tiếp tục với các bước tiếp theo. Bạn sẽ sử dụng lại các tệp dự án hiện có.
Trong dạng xem EXPLORER, hãy bung rộng thư mục CsharpProjects .
Bạn sẽ thấy thư mục TestProject và hai tệp, một tệp chương trình C# có tên Program.cs và tệp dự án C# có tên là TestProject.csproj.
Trên menu Mã Visual Studio tệp, chọn mở thư mục.
Trong hộp thoại Mở Thư mục, chọn thư mục CsharpProjects , rồi chọn Chọn Thư mục.
Trong dạng xem EXPLORER, mở rộng thư mục TestProject, rồi chọn Program.cs.
Xóa bỏ các dòng mã hiện có.
Bạn sẽ sử dụng dự án bảng điều khiển C# này để tạo, xây dựng và chạy mẫu mã trong mô-đun này.
Đóng pa-nen Đầu cuối.
Gọi các loại phương pháp khác nhau trong Thư viện Lớp học .NET
Trong Trình soạn thảo Mã Visual Studio, để tạo mẫu mã
System.Random
System.Console
thực thi các phương pháp và lớp, hãy nhập mã sau:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);
Mã này mô phỏng một cuộn dice bằng cách sử dụng phương
Random.Next()
pháp để tạo ra một số, và phươngConsole.WriteLine()
pháp để hiển thị giá trị.Lưu ý
Bạn sẽ kiểm tra mã chi tiết sau trong đơn vị này.
Trên menu Tệp Mã Visual Studio, bấm Lưu.
Trong dạng xem EXPLORER, để mở Một Thiết bị đầu cuối tại vị trí thư mục TestProject của bạn, hãy bấm chuột phải vào TestProject, rồi chọn Mở trong Đầu cuối Tích hợp.
Lưu ý rằng pa-nen Đầu cuối bao gồm dấu nhắc lệnh hiển thị đường dẫn thư mục. Chẳng hạn:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>
Khi bạn sử dụng thiết bị đầu cuối để chạy lệnh .NET CLI, lệnh chạy từ vị trí thư mục hiển thị. Đảm bảo rằng thư mục mã của bạn khớp với đường dẫn thư mục được hiển thị trong dấu nhắc lệnh trước khi bạn tạo hoặc chạy mã của mình.
Tại dấu nhắc lệnh Thiết bị đầu cuối, để chạy mã của bạn, hãy dotnet chạy rồi nhấn Enter.
Lưu ý rằng một số từ 1 đến 6 được hiển thị trong đầu ra giao diện điều khiển (số lượng dấu chấm trên con sắc). Nếu bạn chạy mã đủ thời gian, bạn sẽ thấy từng số 1-6 được hiển thị.
Mất một phút để kiểm tra cú pháp được sử dụng để truy nhập vào các
Next()
phương pháp vàWriteLine()
.Lưu ý rằng bạn sử dụng các kỹ thuật khác nhau để truy cập vào các phương pháp.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);
Trên dòng mã thứ ba, bạn bao gồm một tham chiếu đến lớp
Console
học và gọi phương phápConsole.WriteLine()
trực tiếp. Tuy nhiên, bạn sử dụng một kỹ thuật khác nhau để gọi phươngRandom.Next()
pháp. Lý do tại sao bạn đang sử dụng hai kỹ thuật khác nhau là vì một số phương pháp là "nhà nước" và những phương pháp khác là "vô quốc gia". Bạn kiểm tra sự khác biệt giữa các phương pháp stateful và stateless trong phần tiếp theo.
Phương pháp stateful và stateless
Trong các dự án phát triển phần mềm, thuật ngữ được sử dụng để mô tả điều kiện của môi trường thực hiện tại một thời điểm cụ thể trong thời gian. Khi mã của bạn thực thi từng dòng, các giá trị được lưu trữ trong các biến. Tại bất kỳ thời điểm nào trong khi thực thi, trạng thái hiện tại của ứng dụng là tập hợp tất cả các giá trị được lưu trữ trong bộ nhớ.
Một số phương pháp không dựa vào trạng thái hiện tại của ứng dụng để hoạt động đúng cách. Nói cách khác, các phương pháp không trạng thái được thực hiện để chúng có thể hoạt động mà không cần tham chiếu hoặc thay đổi bất kỳ giá trị nào đã được lưu trữ trong bộ nhớ. Các phương pháp không trạng thái còn được gọi là phương pháp tĩnh.
Ví dụ: phương pháp Console.WriteLine()
không dựa vào bất kỳ giá trị nào được lưu trữ trong bộ nhớ. Nó thực hiện chức năng của mình và kết thúc mà không ảnh hưởng đến trạng thái của ứng dụng trong bất kỳ cách nào.
Các phương pháp khác, tuy nhiên, phải có quyền truy cập vào trạng thái của ứng dụng để làm việc đúng. Nói cách khác, các phương pháp trạng thái được xây dựng theo cách mà chúng dựa vào các giá trị được lưu trữ trong bộ nhớ bởi các dòng mã trước đó đã được thực thi. Hoặc chúng sửa đổi trạng thái của ứng dụng bằng cách cập nhật giá trị hoặc lưu trữ các giá trị mới trong bộ nhớ. Chúng còn được gọi là phương pháp thể hiện.
Stateful (instance) methods keep track of their state in fields, which are variables defined on the class. Mỗi phiên bản mới của lớp sẽ nhận được bản sao riêng của những trường đó để lưu trữ trạng thái.
Một lớp duy nhất có thể hỗ trợ cả phương pháp stateful và stateless. Tuy nhiên, khi bạn cần gọi các phương pháp stateful, trước tiên bạn phải tạo ra một thể hiện của lớp để các phương pháp có thể truy cập nhà nước.
Tạo phiên bản của lớp
Một thể hiện của lớp được gọi là một đối tượng. Để tạo phiên bản mới của lớp, bạn sử dụng toán new
tử. Hãy xem xét các dòng sau đây của mã mà tạo ra một thể hiện mới của lớp học Random
để tạo ra một đối tượng mới được gọi là dice
:
Random dice = new Random();
Toán tử new
thực hiện một số việc quan trọng:
- Nó đầu tiên yêu cầu một địa chỉ trong bộ nhớ của máy tính đủ lớn để lưu trữ một đối tượng mới dựa trên lớp
Random
. - Nó tạo ra các đối tượng mới, và lưu trữ nó tại địa chỉ bộ nhớ.
- Nó trả về địa chỉ bộ nhớ để có thể lưu nó trong đối
dice
tượng.
Từ thời điểm đó, dice
khi đối tượng được tham chiếu trong mã, .NET Runtime sẽ thực hiện tra cứu ở phía sau để đưa ra ảo ảnh rằng bạn đang làm việc trực tiếp với chính đối tượng đó.
Mã của bạn sử dụng dice
đối tượng giống như một biến lưu trữ trạng thái của Random
lớp. Khi bạn gọi các phương pháp Next()
trên các đối tượng dice
, phương pháp sử dụng nhà nước được lưu trữ trong các đối dice
tượng để tạo ra một số ngẫu nhiên.
Phiên bản mới nhất của .NET Runtime cho phép bạn tạo đối tượng mà không phải lặp lại tên loại (gọi hàm dựng nhập đích). Ví dụ: mã sau đây sẽ tạo một phiên bản mới của lớp Random
:
Random dice = new();
Mục đích của việc này là đơn giản hóa tính dễ đọc của mã. Bạn luôn sử dụng dấu ngoặc đơn khi viết biểu thức nhập đích new
.
Tại sao phương pháp Next() lại có tính trạng thái?
Bạn có thể tự hỏi tại sao phương pháp Next()
này đã được thực hiện như một phương pháp nhà nước? Các nhà thiết kế Thư viện Lớp học .NET không thể tìm ra cách để tạo một số ngẫu nhiên mà không yêu cầu trạng thái? Và chính xác những gì đang được lưu trữ hoặc tham chiếu bởi các phương Next()
pháp?
Đây là những câu hỏi công bằng. Ở cấp độ cao, máy tính rất giỏi trong việc làm theo các hướng dẫn cụ thể để tạo ra một kết quả đáng tin cậy và có thể lặp lại. Để tạo ra hình ảnh ngẫu nhiên, Next()
các nhà phát triển của phương pháp đã quyết định để nắm bắt ngày và thời gian xuống đến phần nhỏ của một mili giây và sử dụng đó để hạt giống một thuật toán tạo ra một số khác nhau mỗi lần. Trong khi không phải hoàn toàn ngẫu nhiên, nó đủ cho hầu hết các ứng dụng. Trạng thái được chụp và duy trì trong suốt vòng đời của đối dice
tượng là giá trị hạt giống. Mỗi lời gọi tiếp theo đến Next()
phương pháp là chạy lại thuật toán, nhưng đảm bảo rằng hạt giống thay đổi để cùng một giá trị không (nhất thiết) được trả về.
Tuy nhiên, để Random.Next()
sử dụng phương pháp này, bạn không cần phải hiểu cách thức hoạt động của phương pháp. Điều quan trọng cần biết là một số phương pháp đòi hỏi bạn phải tạo một phiên bản của một lớp trước khi bạn gọi cho họ, trong khi những người khác thì không.
Làm thế nào bạn có thể xác định xem bạn có cần tạo một phiên bản của một lớp trước khi gọi các phương pháp của nó không?
Một cách tiếp cận để xác định xem một phương pháp là stateful hay stateless là tham khảo tài liệu. Tài liệu bao gồm các ví dụ cho thấy phương pháp phải được gọi từ các trường hợp đối tượng hoặc trực tiếp từ lớp.
Lưu ý
Bạn có thể cần phải cuộn xuống trên trang tài liệu để tìm các ví dụ về mã.
Như một thay thế để tìm kiếm thông qua tài liệu sản phẩm, bạn có thể cố gắng truy cập vào các phương pháp trực tiếp từ các lớp chính nó. Nếu nó hoạt động, bạn biết rằng đó là một phương pháp stateless. Điều tồi tệ nhất có thể xảy ra là bạn sẽ nhận được lỗi biên soạn.
Hãy thử truy nhập trực tiếp vào Random.Next()
phương pháp và xem điều gì sẽ xảy ra.
Nhập dòng mã sau đây vào Trình soạn thảo Mã Visual Studio:
int result = Random.Next();
Bạn đã biết đó là
Next()
một phương pháp trạng thái, tuy nhiên ví dụ này chứng minh làm thế nào Trình soạn thảo Mã Visual Studio phản ứng khi bạn cố gắng truy cập một phương pháp không chính xác.Lưu ý rằng đường gợn sóng màu đỏ xuất hiện
Random.Next
bên dưới , cho biết rằng bạn gặp lỗi biên soạn.Nếu phương pháp mà bạn quan tâm đến việc sử dụng là stateless, không có đường gợn sóng màu đỏ sẽ xuất hiện.
Di con trỏ chuột trên đường gợn sóng màu đỏ.
Cửa sổ bật lên sẽ xuất hiện với thông báo sau:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'
Như bạn thấy trong mã ở phần đầu của đơn vị,
Random
bạn có thể khắc phục lỗi này bằng cách tạo một phiên bản của lớp trước khi truy cập phươngNext()
pháp. Chẳng hạn:Random dice = new Random(); int roll = dice.Next();
Trong trường hợp này, phương pháp được
Next()
gọi mà không có tham số đầu vào.
Tóm tắt
- Để gọi các phương thức của lớp trong Thư viện Lớp học .NET,
ClassName.MethodName()
bạn sử dụng định dạng ,.
()
trong đó ký hiệu là toán tử truy nhập thành viên để truy nhập vào phương thức được xác định trên lớp và các ký hiệu là các toán tử gọi phương thức. - Khi gọi phương pháp không có trạng thái, trước tiên bạn không cần tạo phiên bản mới của lớp đó.
- Khi gọi một phương pháp trạng thái, bạn cần phải tạo ra một thể hiện của lớp học, và truy cập phương pháp trên các đối tượng.
- Sử dụng
new
toán tử để tạo phiên bản mới của lớp. - Một thể hiện của lớp được gọi là một đối tượng.