Phương thức và các tham số bổ trợ

Ngày đăng: 22 - 01 - 2021 Lượt xem: 342 lượt

Mở đầu

Phương thức (method) trong C# là một tên gọi khác của hàm mà các bạn đã biết. Phương thức là 1 nhóm các câu lệnh cùng thực hiện hoàn chỉnh một nhiệm vụ của lớp (class). Ví dụ: phương thức tính tổng 2 số, phương thức tìm số lớn nhất trong mảng, … Chúng ta sẽ cùng làm rõ hơn phương thức trong các nội dung sau.

Cú pháp

Phương thức được khai báo như sau:

<Access_Modifiers> <return_type> <Name_Method>(<parameters>)
{
    //code here
}

Trong đó:

    • Access_Modifiers: được gọi là bổ từ truy cập, có thể nhận các giá trị: public, private, protected, internal.
    • return_type: Kiểu trả về có thể là 1 kiểu dữ liệu hoặc kiểu void
    • Name_Method: tên của phương thức, được đặt theo chuẩn Pascal.
    • parameters: danh sách các tham số. cú pháp: KIỂU_DỮ_LIỆU tenThamSo. Các tham số được đặt tên theo chuẩn Camel

Ví dụ:

//phương thức void
public void ShowMessage(string message)
{
    Console.WriteLine("Message: " + message);
}
//phương thức có kiểu trả về
public int Add(int a, int b)
{
    int c = a + b;
    return c; //cần có từ khóa return
}

Phương thức Main(string[] args)

Xem lại các dự án mà các bạn đã tạo ra, có thể thấy chương trình luôn có 1 phương thức Main trong lớp program. Phương thức này có từ khóa static, có nghĩa là phương thức được khởi tạo ngay sau khi chương trình được RUN.

Với từ khóa static, 1 phương thức được gọi trực tiếp thông qua tên lớp. Ví dụ:

static void Main(string[] args)
{
    int result = Program.Add(10, 20);
}

public static int Add(int number1, int number2)
{
    int total = number1 + number2;
    return total;
}

Trong đoạn lệnh ta thấy câu lệnh:

int result = Program.Add(10, 20);

Đây chính là lời gọi đến phương thức Add.

Sử dụng phương thức

Thông thường, phương thức được tạo trong lớp. Khi gọi đến phương thức, ta cần khởi tạo 1 lớp trước khi sử dụng. Ví dụ, lớp SinhVien có phương thức TinhDiemTrungBinh được khai báo như sau:

class SinhVien
{
//Thuộc tính
        public double LapTrinh { get; set; }
        public double CoSoDuLieu { get; set; }
        public double PhanTichHeThong { get; set; }
//Phương thức
        public double TinhDiemTrungBinh()
        {
            double avg = (LapTrinh + CoSoDuLieu + PhanTichHeThong) / 3;

            return avg;
        }
}

Muốn sử dụng phương thức TinhDiemTrungBinh, ta vào phương Thức Main của lớp Program, khởi tạo đối tượng sinh viên và gọi đến phương thức này như sau:

static void Main(string[] args)
        {
            //khởi tạo đối tượng
            SinhVien sinhVienA = new SinhVien();
            
            //gán giá trị cho thuộc tính
            sinhVienA.CoSoDuLieu = 9.0;
            sinhVienA.LapTrinh = 8.5;
            sinhVienA.PhanTichHeThong = 7.0;

            //gọi hàm
            double diemTrungBinh = sinhVienA.TinhDiemTrungBinh();

            //hiển thị kết quả
            Console.WriteLine("Sinh vien A co DTB = " + diemTrungBinh);
        }

Tham số trong phương thức

Chúng ta có 2 loại tham số:

  1. Tham số bắt buộc
  2. Tham số tùy chọn

Ta cùng phân tích ví dụ sau:

public static int Add(int number1, int number2, int number3 = 10)
        {
            int total = number1 + number2 + number3;
            return total;
        }

Trong ví dụ trên, phương thức Add có 3 tham số:

  • int number1: đây là tham số bắt buộc, kiểu int
  • int number2: đây là tham số bắt buộc, kiểu int
  • int number3 = 10: đây là tham số tùy chọn, có giá trị mặc định là 10

Để gọi phương thức Add trên, ta có các cách gọi sau:

static void Main(string[] args)
        {
            //truyền đầy đủ tham số
            int result1 = Add(1, 2, 3);

            //không truyền tham số tùy chọn
            int reuslt2 = Add(1, 2);

            //truyền qua tên gọi của biến
            int result3 = Add(
                number2: 10, 
                number3: 8,
                number1: 7);

        }

Từ khóa ref và out

1. Từ khóa ref

Trong C/C++, chúng ta đã biết được cách truyền tham chiếu trong 1 hàm với ký tự &. Trong C#, từ khóa ref cũng tương tự như &, tức là truyền địa chỉ ô nhớ của 1 biến vào trong hàm. Việc truyền tham chiếu sẽ dẫn đến 1 hệ quả: các thay đổi trong hàm với các biến tham chiếu sẽ được ghi nhận. Tức là giá trị của biến sau khi ra khỏi hàm sẽ thay đổi nếu trong hàm có thực hiện thao tác gán giá trị.

Ví dụ:

static void Main(string[] args)
        {
            int number = 100;

            Console.WriteLine("Before: " + number);
            
            IncreaseValue(ref number);

            Console.WriteLine("After: " + number);

            //Before: 100
            //After: 110
        }

        static void IncreaseValue(ref int a)
        {
            a += 10;
        }

Có thể thấy, biến number đã thay đổi giá trị sau khi gọi phương thức IncreaseValue. Điều này sẽ không xảy ra khi truyền tham tham trị.

Lưu ý: từ khóa ref cần được sử dụng trong khai báo và gọi phương thức, tham số ref cần được khởi tạo (không được null) trước khi truyền vào phương thức.

2. Từ khóa out

Tương tự từ khóa ref, từ khóa out cũng là 1 cách truyền tham chiếu trong C#. Tuy nhiên, từ khóa out yêu cầu lập trình viên phải có ít nhất 1 lệnh gán giá trị cho tham số, và tham số kiểu out có thể null.

Ví dụ:

static void Main(string[] args)
        {
            int canh1 = 6;
            int canh2 = 8;
            int canh3 = 9;
            double dienTich = 0;

            bool ketQua = DienTichTamGiac(canh1, canh2, canh3, out dienTich);

            if (ketQua)
            {
                Console.WriteLine("Dien tich tam giac la: " + dienTich);
            }
            else
            {
                Console.WriteLine("Day khong phai la tam giac");
            }
        }

        static bool DienTichTamGiac(int a, int b, int c, out double dienTich)
        {
            if ((a + b > c) || (a + c > b) || (b + c > a))
            {
                double p = (double)(a + b + c) / 2.0;

                dienTich = Math.Sqrt(p * (p - a) * (p - b) * (p - c));

                return true;
            }
            dienTich = 0;
            return false;
        }

Từ khóa out dùng trong các trường hợp chúng ta muốn khởi tạo giá trị cho các biến đầu vào hoặc 1 hàm có nhiều hơn 1 kết quả (giống với ví dụ trên).

Từ khóa params

Tham số params được dùng với một biến kiểu mảng. Với hàm có tham số được khai báo kèm với từ khóa params, ta có thể truyền giá trị theo kiểu liệt kê từng phần tử của mảng.

Ví dụ khai báo phương thức có tham số params:

static int ComputeTotal(params int[] list)
        {
            Console.WriteLine("Items: " + list.Length);
            int total = 0;
            foreach(int item in list)
            {
                total += item;
            }
            return total;
        }

Sử dụng phương thức trên bằng các cách sau:

static void Main(string[] args)
        {
            //không truyền giá trị
            int result1 = ComputeTotal();

            //truyền vào danh sách giá trị
            int result2 = ComputeTotal(1, 2, 3, 4, 5);

            //truyền vào 1 mảng
            int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };

            int reuslt3 = ComputeTotal(arr);
        }

Có thể thấy, từ khóa params đem lại sự linh hoạt trong lời gọi phương thức với các tham số kiểu mảng.

Lưu ý: 1 phương thức chỉ có tối đa 1 tham số params.

Nạp chồng phương thức

Nạp chồng hay còn gọi là overloading một phương thức được hiểu là: Cùng tên với phương thức đã có và thỏa 1 trong các điều kiện sau:

  • Khác nhau số lượng tham số
  • Khác nhau kiểu dữ liệu tham số
  • Khác nhau thứ tự các tham số

Ví dụ:

static int Add(int a, int b)
        {
            return a + b;
        }

        static int Add(int a, int b, int c)
        {
            return a + b + c;
        }

        static double Add(double a, int b)
        {
            return a + b;
        }

Bài tập củng cố:

  1. Viết hàm in ra 1 đoạn thông báo kèm với thời gian của hệ thống. Ví dụ: “Lỗi hệ thống – 22/01/2021 13:20:40”
  2. Viết hàm tìm số lớn nhất trong 3 số
  3. Viết hàm kiểm tra 1 số là số chẵn hay lẻ
  4. Viết hàm kiểm tra 1 số là số nguyên tố hay không?
  5. Viết hàm tính giá trị của biểu thức C(k,n).
5 1 vote
Article Rating

Subscribe
Notify of
guest
27 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Văn Lợi

public static int SoLonNhat(int[] a)     {       int max = a[0];       for (int i=0;i<a.Length;i++)       {         if (max <= a[i]) max = a[i];        }       return max;     }     public static int TongChan(int[] a)     {       int sum = 0;       for (int i = 0; i < a.Length; i++)       {         if (a[i] % 2 ==… Read more »

lovecolor

public void printSign()     {       Console.WriteLine(“Lỗi hệ thống – “+DateTime.Now);     }     public int maxin3(int a,int b,int c)     {       return a>b?a>c?a:c:b>c?b:c;     }     public bool Check_Nto(int n)     {       if (n < 2) return false;       for(int i=2,l=(int)Math.Sqrt(n);i<=l;i++)       {         if (n % i == 0) return false;       }       return true;     }     public int ckn(int k,int… Read more »

Văn Lợi

 //1     public static void Toast()     {       Console.WriteLine(“Loi he thong-” + DateTime.Now);     }     //2     public static double Max(double s1, double s2, double s3)     {       double max = s1;       if (max <= s2) max = s2;       if (max <= s3) max = s3;       return max;     }     //3     public static void EvenorOdd(double number)… Read more »

ĐOÀN THỊ THU 18CNTT4

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace buoi2 {   class Program   {     static void Main(string[] args)     {       Console.WriteLine(“Tim so nho nhat trong 3 so”);       int so1, so2, so3;       Console.WriteLine(“Nhap 3 so:”);       so1 = Convert.ToInt32(Console.ReadLine());       so2 = Convert.ToInt32(Console.ReadLine());       so3 = Convert.ToInt32(Console.ReadLine());       int SONHONHAT(int a, int b, int… Read more »

HuynhVanDong-17C1
        void phanSo(int a1,int a2,int b1, int b2)
        {
            int tuPs1 = a1 * b2;
            int tuPs2 = a2 * b1;
            int mauPs = a2 * b2;


            int tu = tuPs1 + tuPs2;


            for(int i=Convert.ToInt32((tu/2));i>1;i--)
            {
                if(tu%i==0 && mauPs%i==0)
                {
                    Console.WriteLine( "Phan so la: " + tu/i + "/" + mauPs/i);
                    break;
                }
            }


            // Console.WriteLine( "Phan so la: " + tu + "/" + mauPs);
        }
phethoan

nt min(int a,int b,int c)
    {
      return b < a ? b < c ? b : c : a < c ? a : c;
    }


Văn Lợi

 public static int USCLN(int a, int b)     {       int temp;       while(b>0)       {         a = a % b;         temp = a;a = b;b = temp;       }       return a;     }      public static void PhanSo(int tu1,int mau1,int tu2,int mau2)     {       int tu, mau;       tu = tu1 * mau2 + tu2 * mau1;       mau… Read more »

HuynhVanDong-17C1

void B1()         {             Console.WriteLine("Lỗi hệ thống – " + DateTime.Now.ToString("dd MM yyyy HH:mm:ss"));         }         void B2()         {             Console.Write("Nhap a");             int a = Convert.ToInt32(Console.ReadLine());             Console.Write("Nhap b");             int b = Convert.ToInt32(Console.ReadLine());             Console.Write("Nhap c");             int c = Convert.ToInt32(Console.ReadLine());             int max = a;             if(max < b)             {                 max = b;             }                          if(max < c)             {                 max = c;             }             Console.WriteLine("So lon nhat la: " + max);         }         void B3()         {             Console.Write("Nhap a");             int a = Convert.ToInt32(Console.ReadLine());                          if(a%2 == 0)             {                 Console.WriteLine("La so chan");             }             else             {                 Console.WriteLine("La so le");             }         }         void B4()         {             Console.Write("Nhap a");             int a = Convert.ToInt32(Console.ReadLine());             if(a < 2){                 Console.WriteLine("khong phai so nguyen to");                 return ;             }             for(int i = 2; i <= Math.Sqrt(a); i++){                 if(a % i == 0){                     Console.WriteLine("Khong phai so nguyen to");… Read more »

Nguyễn Minh Quốc 18CNTT4

Boolean IsPrime(int number) { if(number==1){ return false; } for(int i = 2;i<number;i++){ if(number%i==0){ return false; } } return true; } int SumEvenNumber(int [] arr){ int sum =0; for(int i=0;i<arr.Length;i++){ if(arr[i]%2==0){ sum+= arr[i]; } } return sum; } int MaxNumberArr(int [] arr){ int max = arr[0]; for(int i=1;i<arr.Length;i++){ if(max <=arr[i]){ max… Read more »

Nguyen Van Cam

using System; namespace Method {   class Program   {     static void Main(string[] args)     {       int n = int.Parse(Console.ReadLine());       int[] arr = new int[n];       for (int i = 0; i < n; i++)       {         arr[i] = int.Parse(Console.ReadLine());       }       int result = 0; //1       for (int i = 0; i < n; i++)… Read more »

Đào Ngọc Khuê

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 {   class Program   {     static void Main(string[] args)     {       ///       ///cho mang int        ///1.tinh tong cac so chan       ///2.tim so lon nhat       ///3 dem so luong so nt               int n;       Console.WriteLine(“Nhap vao so phan tu mang:”);        … Read more »

phethoan

void Arr(int[] list)     {       int l = list.Length;       int max = list[0],sumEven=0,countNto=0;       for(int i = 1; i < l; i++)       {         int item = list[i];         if (max < item) max = item;         if (item % 2 == 0) sumEven += item;         bool check = true;         for(int j=2,n=(int)Math.Sqrt(item);j<=n;j++)         {           if (item… Read more »

hoang2k

using System; using System.Collections.Generic; namespace baitap1 {   class Program   {     bool SoNguyenTo(int n)     {       if (n < 2) return false;       else       {         for(int i=2;i<=Math.Sqrt(n);i++)         {           if(n%i==0)           {             return false;           }         }         return true;       }     }     static void Main(string[] args)     {       int n;       int dem = 0;       n = Convert.ToInt32(Console.ReadLine());       Program… Read more »

Văn Lợi

 public static int SoLonNhat(int[] a)     {       int max = a[0];       for (int i=0;i<a.Length;i++)       {         if (max <= a[i]) max = a[i];        }       return max;     }     public static int TongChan(int[] a)     {       int sum = 0;       for (int i = 0; i < a.Length; i++)       {         if (a[i] % 2 ==… Read more »

Nguyễn Minh Quốc 18CNTT4

void Notification(){ Console.WriteLine(“Lỗi hệ thống – “+DateTime.Now); } int MaxNumber(int number1, int number2, int number3){ int max = number1; if(max<=number2){ max = number2; } if(max<=number3){ max = number3; } return max; } void CheckNumber(int number){ if(number%2==0){ Console.WriteLine(“Even number“); } else{ Console.WriteLine(“Odd number“); } } int Combination(int k, int n){ int… Read more »

Bá Lộc

public static void Ren() {   Console.WriteLine(“BUON NGU ” +DateTime.Now); } public static double NumMax(double s1, double s2, double s3) {   double max = s1;   if (max <= s2) max = s2;   if (max <= s3) max = s3;   return max; } public static void Check(double number) {   if (number %… Read more »

Công Nguyên

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 {   class Program   {     static void Main(string[] args)     {       // cho 1 mảng int       int N;       Console.Write(“Nhap N: “);       N = int.Parse(Console.ReadLine());       int[] array = new int[N];       for (int i = 0; i < N; i++)       {         Console.Write(“Nhap phan tu thu {0}:… Read more »

NotSai

using System; namespace Basic {   class Program   {     static void Main(string[] args)     {       // cho một mảng int yêu cầu       // 1. Tính tổng các số chẵn       // 2. Tìm số lớn nhất       // 3. Đếm số lượng số nguyên tố có trong mảng       int[] newArray = new int[] {… Read more »

Võ Thị Mỹ Loan 18CNTT1

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BT2 {   class Program   {     static void Main(string[] args)     {       //Viết hàm in ra 1 đoạn thông báo kèm với thời gian của hệ thống. Ví dụ: “Lỗi hệ thống – 22/01/2021 13:20:40       bt5();       //Viết hàm tìm số lớn… Read more »

QueAnh

static string NgayHeThong()     {       return “Lỗi hệ thống-“+ DateTime.Now;     }     static int SoLonNhat(int a,int b,int c)     {       if (a >= b && a >= c) return a;       if (b >= a && b >= c) return b;       return c;     }     static bool SoChan(int a)     {       if ((a & 1) ==… Read more »

Huỳnh Văn Sang

//Cau 1 void Time()     {       Console.WriteLine(“Loi he thong – ” + DateTime.Now);     } //Cau 2 int MaxNum(int a, int b, int c)     {       int maxNum = Math.Max(a, Math.Max(b, c));       return maxNum;     } //Cau 3 void CheckNum(int a)     {       if (a % 2 == 0)       {         Console.WriteLine(a + ” la so… Read more »

ĐOÀN THỊ THU 18CNTT4

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BT2 {   class Program   {     static void Main(string[] args)     {       //Câu 1:Viết hàm in ra 1 đoạn thông báo kèm với thời gian của hệ thống. Ví dụ: “Lỗi hệ thống – 22/01/2021 13:20:40”       Console.WriteLine(“**Cau 1:”);       void ThongBao()       {… Read more »

Phạm Thị Thùy_18CNTT3

static string Ngay() { return “Lỗi hệ thống-“+ DateTime.Now; } static int SoLonNhat(int a,int b,int c) { if (a >= b && a >= c) return a; if (b >= a && b >= c) return b; return c; } static bool SoChan(int a) { if ((a & 1) ==… Read more »

Hồ Khánh Hòa 17CNTT2

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BT {   class Program   {     //Bai 2     public static int SoLonNhat(int a, int b, int c)     {       int max = a;       if (max < b)       {         max = b;       }       if (max < c)       {         max = c;       }… Read more »

Nguyen Thanh Huy

Bài 2: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace hamMax {   class Program   {     static void Main(string[] args)     {       Program program = new Program();       int a;       a = int.Parse(Console.ReadLine());       int b;       b = int.Parse(Console.ReadLine());       int c;       c = int.Parse(Console.ReadLine());       int result = program.max(a, b, c);       Console.WriteLine(“So… Read more »

Lâm Thị Dưỡng 17CNTT1

2. public static int SoLonNhat(int a, int b, int c)     {       int max = a;       if (max < b)       {         max = b;       }       if (max < c)       {         max = c;       } 3. class Program    {        static void Main(string[] args)        {            Console.Write(“Nhap vao mot so de kiem tra:”);            int… Read more »

Bài viết liên quan

27
0
Would love your thoughts, please comment.x
()
x