VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C# Cơ Bản

C# là gì? - C# được sử dụng để làm gì? C# - Cài đặt môi trường C# - Cấu trúc chương trình C# - Cấu trúc cơ bản C# - Kiểu dữ liệu C# - Ép kiểu dữ liệu C# - Hằng số (Constant) C# - Toán tử C# - Lệnh if-else C# - Lệnh switch-case C# - Vòng lặp for C# - Vòng lặp while C# - Vòng lặp do-while C# - Nullable C# - Phương thức C# - Lớp (class) và đối tượng (Object) C# - Mảng (array) C# - Chuỗi (string) C# - Struct C# - Enum C# - Interface C# - Namespace C# - Preprocessor Directive C# - Regular Expression C# - Xử lý ngoại lệ C# - File I/O

Các Tính Chất Hướng Đối Tượng C#

C# - Tính đóng gói C# - Tính kế thừa C# - Tính đa hình C# - Nạp chồng toán tử

C# Nâng Cao

C# - Attribute C# - Reflection C# - Property C# - Indexer C# - Delegate C# - Sự kiện (Event) C# - Collection C# - Generic C# - Phương thức nặc danh C# - Unsafe Code C# - Multithreading

Bài tập C#

Bài tập C# có lời giải

Học Lập Trình C/C++

Học lập trình C Học lập trình C++
1 / 3
❮ ❯

Tính đa hình trong C#


previous
next

Tính đa hình trong C# nghĩa là có nhiều hình thái. Trong lập trình hướng đối tượng, tính đa hình thường được diễn đạt như là "một Interface, nhiều hàm".

Tính đa hình trong C# có thể là static hoặc dynamic. Trong đó, kiểu đa hình static có thể được gọi là đa hình tĩnh và kiểu đa hình dynamic có thể được gọi là đa hình động.


Nội dung chính

  • Đa hình static trong C#
  • Nạp chồng hàm trong C#
  • Đa hình dynamic trong C#

Đa hình static trong C#

Trong đa hình tĩnh, phần phản hồi tới một hàm được xác định tại compile time. Trong khi đó với đa hình động, nó được quyết định tại runtime.

Kỹ thuật liên kết một hàm với một đối tượng trong thời gian biên dịch được gọi là Early Binding. Nó cũng được gọi là Static Binding. C# cung cấp hai kỹ thuật để triển khai đa hình tĩnh. Chúng là:

  • Nạp chồng hàm (Function overloading)
  • Nạp chồng toán tử (Operator overloading)

Chúng ta sẽ bàn luận về nạp chồng toán tử trong chương sau.


Nạp chồng hàm trong C#

Bạn có thể có nhiều định nghĩa cho cùng tên hàm trong cùng một phạm vi. Các định nghĩa này của hàm phải khác nhau: như kiểu và/hoặc số tham số trong danh sách tham số. Trong C#, bạn không thể nạp chồng các khai báo hàm mà chỉ khác nhau ở kiểu trả về.

Ví dụ sau minh họa cách sử dụng hàm print() để in các kiểu dữ liệu khác nhau trong C#:


using System;
namespace VietTutsCsharp
{
    public class TestCsharp
    {
        void print(int i)
        {
            Console.WriteLine("In so nguyen: {0}", i);
        }
        void print(double f)
        {
            Console.WriteLine("In so thuc: {0}", f);
        }
        void print(string s)
        {
            Console.WriteLine("In chuoi: {0}", s);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Tinh da hinh trong C#");
            Console.WriteLine("--------------------------");
            //tao doi tuong TestCsharp
            TestCsharp p = new TestCsharp();
            // goi ham print()
            p.print(5);
            p.print(100.69);
            p.print("Huong dan hoc lap trinh C#");
            Console.ReadKey();
        }
    }
}

Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Tính đa hình trong C#

Đa hình dynamic trong C#

C# cho phép bạn tạo các lớp abstract (trừu tượng) mà được sử dụng để cung cấp trình triển khai cục bộ lớp của một Interface. Trình triển khai (Implementation) được hoàn thành khi một lớp kế thừa kế thừa từ nó. Các lớp Abstract chứa các phương thức abstract, mà được triển khai bởi lớp kế thừa. Lớp kế thừa này có tính năng chuyên dụng hơn.

Dưới đây là một số qui tắc về các lớp abstract trong C#:

  • Bạn không thể tạo một Instance (sự thể hiện) của một lớp abstract.

  • Bạn không thể khai báo một phương thức abstract ở bên ngoài một lớp abstract.

  • Khi một lớp được khai báo là sealed, nó không thể được kế thừa, các lớp abstract không thể được khai báo là sealed.

Ví dụ sau minh họa một lớp abstract trong C#: tạo 3 lớp có tên lần lượt là Shape, HinhChuNhat, TestCsharp như sau:

Lớp Shape: là một lớp abstract


using System;
namespace VietTutsCsharp
{
    abstract class Shape
    {
        public abstract int tinhDienTich();
    }
}

Lớp HinhChuNhat: là một lớp kế thừa lớp Shape


using System;
namespace VietTutsCsharp
{
    class HinhChuNhat : Shape
    {
        private int chieu_dai;
        private int chieu_rong;
        public HinhChuNhat(int a = 0, int b = 0)
        {
            chieu_dai = a;
            chieu_rong = b;
        }
        public override int tinhDienTich()
        {
            Console.WriteLine("Dien tich hinh chu nhat:");
            return (chieu_rong * chieu_dai);
        }
    }
}

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng HinhChuNhat


using System;
namespace VietTutsCsharp
{
    public class TestCsharp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Tinh da hinh trong C#");
            Console.WriteLine("Vi du minh hoa tinh da hinh dong:");
            Console.WriteLine("--------------------------");
            HinhChuNhat r = new HinhChuNhat(10, 8);
            double a = r.tinhDienTich();
            Console.WriteLine("Dien tich: {0}", a);
            Console.ReadKey();
        }
    }
}

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Tính đa hình trong C#

Khi bạn có một hàm được định nghĩa trong một lớp mà bạn muốn được triển khai một lớp được kế thừa, bạn sử dụng hàm virtual trong C#. Các hàm virtual có thể được triển khai một cách khác nhau trong lớp được kế thừa khác nhau và việc gọi những hàm này sẽ được quyết định tại runtime.

Đa hình động trong C# được triển khai bởi các lớp abstract và các hàm virtual.

Ví dụ sau minh họa điều này: tạo 5 lớp có tên lần lượt là như sau:

Lớp Shape: lớp cơ sở


using System;
namespace VietTutsCsharp
{
    class Shape
    {
        protected int chieu_rong, chieu_cao;
        public Shape(int a = 0, int b = 0)
        {
            chieu_rong = a;
            chieu_cao = b;
        }
        public virtual int tinhDienTich()
        {
            Console.WriteLine("Dien tich cua class cha: ");
            return 0;
        }
    }
}

Lớp HinhChuNhat: là lớp kế thừa lớp Shape


using System;
namespace VietTutsCsharp
{
    class HinhChuNhat : Shape
    {
        public HinhChuNhat( int a=0, int b=0): base(a, b)
      {      }
        public override int tinhDienTich()
      {
         Console.WriteLine("Dien tich cua class HinhChuNhat: ");
         return (chieu_rong * chieu_cao); 
      }
    }
}

Lớp TamGiac: là lớp kế thừa lớp Shape


using System;
namespace VietTutsCsharp
{
    class TamGiac : Shape
    {
        public TamGiac(int a = 0, int b = 0) : base(a, b)
      {
      
      }
        public override int tinhDienTich()
      {
         Console.WriteLine("Dien tich cua class TamGiac: ");
         return (chieu_cao * chieu_rong / 2); 
      }
    }
}

Lớp HienThiDuLieu: in các dữ liệu


using System;
namespace VietTutsCsharp
{
    class HienThiDuLieu
    {
        public void hienThiDienTich(Shape sh)
        {
            int a;
            a = sh.tinhDienTich();
            Console.WriteLine("Dien tich: {0}", a);
        }
    }
}

Lớp TestCsharp: chứa phương thức main() để thao tác trên các đối tượng


using System;
namespace VietTutsCsharp
{
    public class TestCsharp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Tinh da hinh trong C#");
            Console.WriteLine("Vi du minh hoa tinh da hinh dong:");
            Console.WriteLine("--------------------------");
            HienThiDuLieu c = new HienThiDuLieu();
            HinhChuNhat r = new HinhChuNhat(10, 8);
            TamGiac t = new TamGiac(10, 9);
            c.hienThiDienTich(r);
            c.hienThiDienTich(t);
            Console.ReadKey();
        }
    }
}

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Tính đa hình trong C#
previous
next

Recent Updates

Bài tập quản lý sinh viên trong C#Bài tập C# - Liệt kê số Fibonacci nhỏ hơn n và là số nguyên tố trong C#Bài tập C# - Tìm số thuận nghịch trong C#Bài tập C# - Tính tổng của các chữ số của môt số nguyên n trong C#Bài tập C# - Phân tích số nguyên n thành tích các số nguyên tố trong C#Bài tập C# - Liệt kê tất cả số nguyên tố có 5 chữ số trong C#Bài tập C# - Liệt kê n số nguyên tố đầu tiên trong C#Bài tập C# - Liệt kê tất cả các số nguyên tố nhỏ hơn n trong C#Bài tập C# - Tìm ước số chung lớn nhất (USCLN) và bội số chung nhỏ nhất (BSCNN) của 2 sốGiải phương trình bậc 2 trong C#Chuyển đổi hệ cơ số trong C#Tính giai thừa trong C#Sắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml