Cập nhật thông tin chi tiết về Tìm Hiểu Hàm Trong C# mới nhất trên website Tvzoneplus.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.
Khi mình muốn thực thi một đoạn code nào nó nhiều lần, thay vì phải copy đi copy lại đoạn code đó nhiều lần, dẫn đến chương trình chúng ta bị trùng lặp code rất nhiều, trong c# có function cho phép chúng ta thực thi đoạn code nào đó nhiều lần mà không cần phải copy lại code, mà chỉ cần gọi tên hàm.
Vậy cách sử dụng hàm ( function) trong c# như thế nào? Có bao nhiêu cách để truyền tham số vào hàm? Chúng ta cùng tìm hiểu trong nội dung tiếp theo.
Hàm () trong C# dùng để thực thi một khối lệnh nào đó.
Trong đó:
Tên hàm: Nó là một tên duy nhất được sử dụng để gọi hàm. Ví dụ: getValue(), Add(int a, int b)…
Kiểu trả về: Nó được sử dụng để chỉ rõ kiểu dữ liệu của hàm được trả về.
Thân hàm: Nó là khối lệnh sẽ được thực thi khi hàm được gọi.
Quyền truy cập: Nó được sử dụng để xác định khả năng truy cập hàm trong ứng dụng.
Tham số: Nó là một danh sách các tham số mà chúng ta truyền vào khi gọi hàm
Và kết quả sau khi thực thi đoạn code kết:
Hàm có tham số nhưng không có kiểu trả về
Và kết quả sau khi thực thi đoạn code trên:
Hàm có tham số và có kiểu trả về
Và kết quả sau khi thực thi đoạn code trên:
Như vậy là chúng ta đã cùng tìm hiểu về hàm là gì, ví dụ một số loại hàm. Phần tiếp theo mình cùng tìm hiểu một phần quan trong đó là cách gọi hàm có tham số.
3. Cách gọi hàm có tham số
Trong c# có 3 cách gọi hàm đó là gọi bằng giá trị ( call by value), gọi bằng tham chiếu ( call by Reference) và dùng tham số out.
Gọi bằng giá trị (call by value)
Trong C#, gọi bằng giá trị tức là tham số truyền vào là bản sao của giá trị gốc, vì vậy dù cho bên trong thân hàm có thay đổi giá trị của tham số truyền vào thì sau khi kết thúc gọi hàm thì giá trị gốc vẫn không thay đổi.
Trong ví dụ sau, chúng ta truyền tham số giá trị khi gọi hàm:
Và kết quả sau khi thực thi đoạn code trên:
Gọi bằng tham chiếu (call by Reference)
C # cung cấp một từ khóa ref để truyền đối số dưới dạng tham chiếu. Tức là tham số truyền vào bằng địa chỉ ô nhớ của biến gốc vì vậy bên trong thân hàm thay đổi giá trị tham số truyền vào thì giá trị gốc cũng thay đổi theo..
Và kết quả sau khi thực thi đoạn code trên:
Tham số out
Tham số out giống như kiểu tham chiếu, ngoại trừ việc nó không yêu cầu biến khởi tạo trước khi truyền.
Và kết quả sau khi thực thi đoạn code trên:
Như vậy mình chỉ cần phân biệt ref và out như sau:
Giá trị phải được khởi tạo trước
Bên trong thân hàm có thể đọc vào thay đổi giá trị nó
Giá trị không được khởi tạo trước và bên trong thân hàm không đọc được nó cho đến khi nó được gán giá trị
Hàm phải gán giá trị cho biến out trước khi trả giá trị về
4. Lời kết
Tìm Hiểu Về Hàm Xây Dựng, Hàm Hủy Trong C#
Trong bài học hôm nay chúng ta sẽ cùng tìm hiểu về 2 hàm đặc biệt trong c# đó là hàm xây dựng (Constructor) và hàm hủy (Destructor)
1. Hàm xây dựng
Trong C#, constructor là một phương thức đặc biệt được gọi tự động tại thời điểm đối tượng được tạo ra.
Mục đích của hàm xây dựng dùng để khởi tạo dữ liệu cho dữ liệu thành viên.
Constructor phải trùng tên với tên lớp và không có kiểu trả về kể cả kiểu void.
Trong c# có 2 loại hàm xây dựng đó là
Hàm xây dựng mặc nhiên
Hàm xây dựng có đối số
Hàm xây dựng mặc nhiên
Một constructor không có đối số được gọi là constructor mặc định. Nó được gọi tại thời điểm tạo đối tượng.
Nếu bạn không cung cấp hàm tạo cho lớp của mình, C# sẽ tạo một hàm theo mặc định để khởi tạo đối tượng và đặt các biến thành viên thành các giá trị mặc định tùy thuộc vào kiểu dữ liệu của nó.
Mình sẽ liệt kê giá trị mặc định của một số kiểu dữ liệu hay sử dụng sau:
using System; namespace ConsoleApp1 { class People { int old; string name; double height; public People() { Console.WriteLine("Goi ham xay dung mac nhien"); Console.WriteLine("Name" + name); Console.WriteLine("Old: " + old); Console.WriteLine("height: " + height); } } class Program { static void Main(string[] args) { People p = new People(); Console.ReadKey(); } } }Và kết quả sau khi thực thi đoạn code trên:
Lưu ý: nếu chúng ta không tạo bất kỳ hàm xây dựng nào thì chương trình sẽ tự tạo cho chúng ta hàm xây dựng mặc nhiên. Chúng ta chỉ có 1 cách duy nhất để khởi tạo đối tượng.
Hàm xây dựng có tham số
Một constructor có tham số được gọi là hàm xây dựng có tham số.
Nó được sử dụng để cung cấp các giá trị khác nhau cho các đối tượng riêng biệt
using System; namespace ConsoleApp1 { class People { int old; string name; double height; public People() { } public People(int old, string name, double height) { chúng tôi = old; chúng tôi = name; this.height = height; } public People(int old, string name) { chúng tôi = old; chúng tôi = name; } public void Show() { Console.WriteLine("Old: " + old + ",nName: " + name + ",nHeight: " + height); } } class Program { static void Main(string[] args) { People p = new People(); p.Show(); People p1 = new People(20, "Nguyen Van A", 180); p1.Show(); People p2 = new People(18, "Nguyen Van A"); p2.Show(); Console.ReadKey(); } } }Và kết quả sau khi thực thi đoạn code trên:
Như vậy nếu chúng ta định nghĩa bao nhiêu hàm xây dựng, thì chúng ta chỉ có bao nhiêu cách khởi tạo đối tượng. Ở ví dụ trên, chúng ta chỉ định nghĩa 3 hàm xây dựng, vậy nên chúng ta chỉ có 3 cách khởi tạo đối tượng.
2. Hàm hủy
Một hàm hủy hoạt động ngược lại với hàm tạo, Nó phá hủy các đối tượng của các lớp. Nó chỉ có thể được định nghĩa một lần trong một lớp. Giống như các hàm xây dựng, hàm hủy được gọi tự động.
using System; namespace ConsoleApp1 { class People { public People() { } ~People() { } } class Program { static void Main(string[] args) { People p = new People(); Console.ReadKey(); } } }Điểm lưu ý:
Hàm hủy là duy nhất cho lớp của nó, tức là không thể có nhiều hơn một hàm hủy trong một lớp.
Hàm hủy không có kiểu trả về và có cùng tên với tên lớp
Hàm hủy được phân biệt với một hàm xây dựng vì ký hiệu ~trước tên của nó.
Hàm hủy không chấp nhận bất kỳ tham số nào và không được sửa đổi hàm hủy
Hàm hủy không thể được định nghĩa trong Cấu trúc. Hàm hủy chỉ được sử dụng với các lớp.
Hàm hủy không thể bị overloaded hoặc kế thừa. (overload là gì mình sẽ cùng tìm hiểu trong một bài khác)
Hàm hủy được gọi khi chương trình thoát.
Destructor được gọi là ngầm định bởi trình thu thập Rác .NET framework và do đó, chúng ta không cần quan tâm đến hàm hủy này làm gì.. 🙂
3. Lời kết
Như vậy là chúng ta đã cùng tìm hiểu xong về hàm xây dựng và hàm hủy trong c# là gì rồi.
Tìm Hiểu Tính Đa Hình Trong C#
Ở bài trước chúng ta đã tìm hiểu về tính thừa kế trong c# là gì, trong bài học hôm nay chúng ta sẽ cùng tìm hiểu về tính đa hình trong c# là gì?
Trước khi tìm hiểu về tính đa hình trong c# chúng ta cùng tìm hiểu 2 khái niệm quan trọng thể hiện tính đa hình đó là overloading và overriding.
1. Overloading
Nếu chúng ta tạo hai hoặc nhiều thành viên có cùng tên nhưng khác nhau về số lượng tham số hoặc kiểu của các tham số, thì được gọi là member overloading.
In C#, Chúng ta có thể overload: phương thức ( methods), hàm xây dựng ( constructors), và chỉ số của thuộc tính ( indexed properties)
Ví dụ chúng ta overload hàm xây dựng
NhanVien(string name, int tuoi, string id)
NhanVien(string name, int tuoi)
NhanVien()
Trong bài học hôm nay chúng ta chỉ tìm hiểu về overload phương thức.
Overload phương thức nghĩa là hai hay nhiều phương thức cùng tên nhưng khác nhau về số lượng tham số hoặc kiểu dữ liệu của từng tham số.
Mục đích của việc overload phương thức là tăng cái tính dễ đọc cho chương trình vì chúng ta không cần đặt nhiều cái tên khác nhau cho cùng một hành động giống nhau. Ví dụ mục đich của hàm cộng nhưng cộng 2 số, cộng 3 số, cộng 4 số. Chúng ta không cần viết 3 phương thức với tên khác nhau mặc dù nó chỉ có một hành động là cộng.
using System; namespace ConsoleApp1 { class PhepTinh { public int Cong(int a, int b) { Console.WriteLine("Cong(" + a + ", " + b + ") --Goi phuong thuc Cong(int a, int b)"); return a + b; } public int Cong(int a, int b, int c) { Console.WriteLine("Cong(" + a + ", " + b + ", "+ c +") --Goi phuong thuc Cong(int a, int b, int c)"); return a + b + c; } public float Cong(float a, float b) { Console.WriteLine("Cong(" + a + ", " + b + ") --Goi phuong thuc Cong(float a, float b)"); return a + b; } public float Cong(int a, float b) { Console.WriteLine("Cong(" + a + ", " + b + ") --Goi phuong thuc Cong(int a, float b)"); return a + b; } } class Program { public static void Main(string[] args) { PhepTinh p = new PhepTinh(); p.Cong(1, 2); p.Cong(1, 2, 3); p.Cong(1.2f, 1.2f); p.Cong(2, 1.2f); Console.ReadKey(); } } }Và kết quả sau khi thực thi đoạn code trên:
2. Overriding
Nếu lớp dẫn xuất (hay còn gọi là lớp con) định nghĩa cùng một phương thức như được định nghĩa trong lớp cơ sở ( hay còn gọi là lớp cha) của nó, thì nó được gọi là phương thức ghi đè ( method overriding) trong C#
Để thực hiện ghi đè phương thức trong C#, chúng ta cần sử dụng từ khóa virtual với phương thức ở lớp cơ sở ( lớp cha) và từ khóa override với phương thức ở lớp dẫn xuất ( lớp con).
using System; namespace ConsoleApp1 { class DongVat { public virtual void keu() { Console.WriteLine("dong vat keu"); } } class Cho : DongVat { public override void keu() { base.keu(); Console.WriteLine("cho keu gau gau"); } } class Program { public static void Main(string[] args) { Cho c = new Cho(); c.keu(); Console.ReadKey(); } } }Và kết quả sau khi thực thi đoạn code trên:
Ở ví dụ trên chúng ta thấy có từ khóa base. Vậy từ khóa base để làm gì?
Trong C#, từ khóa base được sử dụng để truy cập các trường, hàm xây dựng và phương thức của lớp cơ sở.
using System; namespace ConsoleApp1 { class DongVat { public string mauLong = "mau trang"; } class Cho : DongVat { public string mauLong = "mau vang"; public void HienThiMauLong() { Console.WriteLine("Long dong vat: " + base.mauLong); Console.WriteLine("Long cho: " + mauLong); } } class Program { public static void Main(string[] args) { Cho c = new Cho(); c.HienThiMauLong(); Console.ReadKey(); } } }Và kết quả sau khi thực thi đoạn code trên:
3. Polymorphism
Từ đa hình ( Polymorphism) mình hiểu đơn giản là có nhiều dạng. Ví dụ như Cộng nhưng cộng 2 tham số, 3 tham số, 4 tham số…
Có hai loại đa hình trong C# đó là: đa hình thời gian biên dịch (compile time) và đa hình thời gian chạy (runtime). Đa hình thời gian biên dịch (compile time) thực hiện bằng cách nạp chồng phương thức (method overloading) và nạp chồng toán tử (operator overloading) trong C#. Đa hình thời gian chạy ( runtime) thực hiện bằng ghi đè phương thức (method overriding)
Đa hình thời gian biên dịch còn có cách gọi khác là đa hình tĩnh ( static polymorphism), đa đình thời gian chạy còn có cách gọi khác là đa hình động ( dynamic polymorphism)
4. Lời kết
Như vậy là chúng ta đã tìm hiểu xong về tính đa hình trong c#.
Cảm ơn các bạn đã đọc bài viêt.
Tìm Hiểu Về Tham Số Biến Trong C
Tìm hiểu về tham số biến trong C
.
.
.
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
Cần lưu ý rằng hàm func () có đối số cuối cùng của nó là các dấu ba chấm, tức là ba dấu chấm ( … ) và một dấu chấm ngay trước dấu ba chấm luôn là một int sẽ đại diện cho tổng số đối số biến được truyền. Để sử dụng chức năng như vậy, bạn cần sử dụng tệp tiêu đề stdarg.h để cung cấp các hàm và macro để thực hiện chức năng của đối số biến và làm theo các bước đã cho.
Xác định hàm có tham số cuối cùng của nó dưới dạng dấu ba chấm và một tham số ngay trước dấu ba chấm luôn là một int sẽ đại diện cho số đối số.
Tạo biến kiểu va_list trong định nghĩa hàm. Kiểu này được định nghĩa trong tệp tiêu đề stdarg.h.
Sử dụng tham số int và va_start macro để khởi tạo biến va_list vào danh sách đối số. Macro va_start được định nghĩa trong tệp tiêu đề stdarg.h.
Sử dụng biến va_arg macro và va_list để truy cập từng mục trong danh sách đối số.
Sử dụng macro va_end để dọn bộ nhớ được gán cho biến va_list .
Bây giờ, chúng ta hãy làm theo các bước trên và viết ra một hàm đơn giản có thể lấy số lượng tham số biến và trả về giá trị trung bình của chúng.
#include
#include
double average(int num,…) {
va_list valist;
double sum = 0.0;
int i;
/* initialize valist for num number of arguments */
va_start(valist, num);
/* access all the arguments assigned to valist */
for (i = 0; i < num; i++) {
sum += va_arg(valist, int);
}
/* clean memory reserved for valist */
va_end(valist);
return sum/num;
}
int main() {
printf(“Average of 2, 3, 4, 5 = %fn”, average(4, 2,3,4,5));
printf(“Average of 5, 10, 15 = %fn”, average(3, 5,10,15));
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau. Cần lưu ý rằng hàm trung bình () đã được gọi hai lần và mỗi lần đối số đầu tiên biểu thị tổng số đối số biến được truyền. Chỉ các dấu ba chấm sẽ được sử dụng để chuyển số lượng đối số biến.
Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000
Bạn đang xem bài viết Tìm Hiểu Hàm Trong C# trên website Tvzoneplus.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!