Saturday, December 7, 2019

Class trong C# - C# cơ bản

Khi bạn xác định một class C#, bạn xác định một kế hoạch chi tiết cho một kiểu dữ liệu. Điều này thực sự không định nghĩa bất kỳ dữ liệu nào, nhưng nó xác định ý nghĩa của tên lớp. Đó là, những gì một đối tượng của lớp bao gồm và những hoạt động nào có thể được thực hiện trên đối tượng đó. Đối tượng là các thể hiện của một lớp. Các phương thức và biến tạo thành một lớp được gọi là thành viên của lớp.
Class trong C#

Xác định một lớp trong C#
Một định nghĩa lớp bắt đầu với lớp từ khóa theo sau là tên lớp; và cơ thể lớp được bao quanh bởi một cặp dấu ngoặc nhọn. Sau đây là hình thức chung của một định nghĩa lớp:
<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
   }
}
Lưu ý:
Các chỉ định truy cập xác định các quy 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ì trình xác định truy cập mặc định cho loại lớp là nội bộ . Truy cập mặc định cho các thành viên là riêng tư .
Kiểu dữ liệu chỉ định loại biến và kiểu trả về chỉ định kiểu dữ liệu của dữ liệu mà phương thức trả về, nếu có.
Để truy cập các thành viên của lớp, bạn sử dụng toán tử dấu chấm (.).
Toán tử dấu chấm liên kết 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 được thảo luận cho đến nay
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;
         // 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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -
Volume of Box1 : 210
Volume of Box2 : 1560
Chức năng thành viên và đóng gói
Hàm thành viên của một lớp là một hàm có định nghĩa hoặc nguyên mẫu của 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ó quyền truy cập vào tất cả cá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ừ quan điểm thiết kế) và chúng được giữ kín để thực hiện đóng gói. Các biến này chỉ có thể được truy cập bằng cách sử dụng các hàm thành viên công cộng.
Chúng ta hãy đặt các khái niệm trên để thiết lập và nhận giá trị của các thành viên lớp khác nhau trong một lớp
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;
       
         // 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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -
Volume of Box1 : 210
Volume of Box2 : 1560
constructor C #
Một lớp constructor là một hàm thành viên đặc biệt của một lớp học mà được thực hiện bất cứ khi nào chúng ta tạo ra các đối tượng mới của lớp đó.
Một constructor có cùng tên với tên của lớp và nó không có bất kỳ kiểu trả về nào. Ví dụ sau giải thích khái niệm về constructor
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();
      }
   }
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -
Object is being created
Length of line : 6
Một constructor mặc định không có bất kỳ tham số nào nhưng nếu bạn cần, một constructor có thể có các tham số. Các constructor như vậy được gọi là constructor tham số . Kỹ thuật này giúp bạn gán giá trị ban đầ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) {
         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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -
Object is being created, length = 10
Length of line : 10
Length of line : 6
Hàm hủy C #
Hàm hủy 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 đó vượt quá phạm vi. Một hàm hủy có cùng tên với tên của lớp có dấu ngã (~) và nó không thể trả về giá trị cũng như không thể lấy bất kỳ tham số nào.
Destructor 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. Phá hủy không thể được thừa kế hoặc quá tải.
Ví dụ sau giải thích khái niệm về hàm hủy
namespace LineApplication {
   class Line {
      private double length;   // Length of a line
   
      public Line() {   // constructor
         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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -

Object is being created
Length of line : 6
Object is being deleted

Biến tĩnh của lớp C #
Chúng ta có thể định nghĩa các thành viên lớp là tĩnh bằng cách sử dụng từ khóa tĩnh . Khi chúng ta khai báo một thành viên của một lớp là tĩnh, điều đó có nghĩa là cho dù có bao nhiêu đối tượng của lớp được tạo ra, chỉ có một bản sao của thành viên tĩnh.
Từ khóa tĩnh ngụ ý rằng chỉ có một phiên bản của thành viên tồn tại cho một lớp. Các biến tĩnh được sử dụng để xác định các hằng số vì các giá trị của chúng có thể được truy xuất bằng cách gọi lớp mà không tạo một thể hiện của nó. Các biến tĩnh 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 tĩnh bên trong định nghĩa lớp.

Ví dụ sau đây cho thấy việc sử dụng các biến tĩnh
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();
       
         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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -

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à tĩnh . Các hàm như vậy chỉ có thể truy cập các biến tĩnh. Các hàm tĩnh tồn tại ngay cả trước khi đối tượng được tạo. Ví dụ sau đây cho thấy việc sử dụng các hàm tĩnh
namespace StaticVarApplication {
   class StaticVar {
      public static int num;
   
      public void count() {
         num++;
      }
      public static int getNum() {
         return num;
      }
   }
   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 đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -

Variable num: 3

No comments:

Post a Comment