Sunday, October 6, 2019

Giá trị và tham chiếu trong lập trình C#

Lập trình C# cơ bản, chúng tôi có hai cách để phân bổ không gian trong bộ nhớ, tức là trên ngăn xếp hoặc bộ nhớ heap dựa trên các tham số Loại giá trị hoặc Loại tham chiếu.
Trong chương trước, chúng ta đã tìm hiểu về Loại dữ liệu trong C # và cách Loại dữ liệu trong c # được phân loại là Loại giá trị hoặc Loại tham chiếu với các ví dụ.
Bây giờ chúng ta sẽ tìm hiểu các loại giá trị và loại tham chiếu trong c # là gì và cách các tham số Loại giá trị và Loại tham chiếu sẽ giữ dữ liệu và bộ nhớ ở cùng một vị trí với các ví dụ.

Các loại giá trị C #

Trong lập trình C#, kiểu dữ liệu là Loại giá trị nếu nó giữ giá trị của biến trực tiếp trên không gian bộ nhớ của chính nó và Loại giá trị sẽ sử dụng Bộ nhớ ngăn xếp để lưu trữ các giá trị biến.
Ví dụ: nếu chúng ta xác định và gán giá trị cho biến như int x = 123; sau đó hệ thống sẽ sử dụng cùng một không gian bộ nhớ của biến ‘x, để lưu giá trị‘ 123.
Sau đây là biểu diễn bằng hình ảnh của các loại giá trị trong ngôn ngữ lập trình c #.
Sau đây là các loại dữ liệu khác nhau sẽ thuộc Loại giá trị trong ngôn ngữ lập trình c #.

C # Pass Loại giá trị theo giá trị

Trong c #, nếu chúng ta truyền một biến loại giá trị từ phương thức này sang phương thức khác, hệ thống sẽ tạo một bản sao riêng cho biến trong phương thức khác. Trong trường hợp, nếu chúng ta thực hiện thay đổi cho biến trong một phương thức thì won sẽ ảnh hưởng đến biến trong phương thức khác.
Sau đây là ví dụ về việc chuyển loại giá trị theo giá trị trong ngôn ngữ lập trình c #.
using System;
namespace Tiennhvn
{
    class Program
    {
        static void Square(int a, int b)
        {
            a = a * a;
            b = b * b;
            Console.WriteLine(a + " " + b);
        }
        static void Main(string[] args)
        {
            int num1 = 5;
            int num2 = 10;
            Console.WriteLine(num1 + " " + num2);
            Square(num1, num2);
            Console.WriteLine(num1 + " " + num2);
            Console.WriteLine("Press Enter Key to Exit..");
            Console.ReadLine();
        }
    }
}
Nếu bạn quan sát ví dụ trên, chúng tôi đã xác định hai biến (num1, num2) trong phương thức Main () và chúng tôi đang thực hiện thay đổi cho biến đó bằng cách chuyển nó sang phương thức Square () nhưng những thay đổi đó sẽ không ảnh hưởng đến các biến trong Main ( ) phương pháp.
Khi chúng tôi thực hiện chương trình trên, chúng tôi sẽ nhận được kết quả như hiển thị bên dưới.

Nếu bạn quan sát kết quả trên, những thay đổi được thực hiện cho các biến trong phương thức Square () đã không ảnh hưởng đến các biến trong phương thức Main ().

Các loại tham khảo C #

Trong c #, Kiểu tham chiếu sẽ chứa một con trỏ trỏ đến vị trí bộ nhớ khác chứa dữ liệu. Thay vào đó, các kiểu tham chiếu đã giành được giá trị biến trực tiếp trong bộ nhớ của nó, nó sẽ lưu địa chỉ bộ nhớ của giá trị biến để chỉ ra nơi lưu trữ giá trị.

Ví dụ: nếu chúng ta xác định và gán giá trị cho biến như chuỗi name = "Suresh Dasari"; sau đó hệ thống sẽ lưu trữ giá trị biến đổi Suresh Dasari Lần ở một vị trí và "tên" biến ở một vị trí khác cùng với địa chỉ bộ nhớ của giá trị biến.
Sau đây là các loại dữ liệu khác nhau sẽ thuộc Loại tham chiếu trong ngôn ngữ lập trình c #.
String
Class
Delegates
All Arays, Even if their elements are value types
Vượt qua loại tham chiếu theo giá trị
Trong c #, nếu chúng ta truyền một biến loại tham chiếu từ phương thức này sang phương thức khác, hệ thống won đã tạo một bản sao riêng cho biến đó thay vì nó chuyển địa chỉ của biến. Vì vậy, nếu chúng ta thực hiện bất kỳ thay đổi nào đối với biến trong một phương thức cũng phản ánh trong phương thức khác.
Sau đây là ví dụ về việc chuyển loại tham chiếu theo giá trị trong ngôn ngữ lập trình c #.
using System;
namespace Tienanhvn
{
    class Person
    {
        public int age;
    }
    class Program
    {
        static void Square(Person a, Person b)
        {
            a.age = a.age * a.age;
            b.age = b.age * b.age;
            Console.WriteLine(a.age + " " + b.age);
        }
        static void Main(string[] args)
        {
            Person p1 = new Person();
            Person p2 = new Person();
            p1.age = 5;
            p2.age = 10;
            Console.WriteLine(p1.age + " " + p2.age);
            Square(p1, p2);
            Console.WriteLine(p1.age + " " + p2.age);
            Console.WriteLine("Press Any Key to Exit..");
            Console.ReadLine();
        }
    }
}
Nếu bạn quan sát ví dụ trên, chúng tôi đã tạo một lớp mới có tên là Person Person và tạo một thể hiện của lớp mới (Person) và gán một giá trị cho các biến trong phương thức Main () và chúng tôi đang thực hiện thay đổi cho biến đó bằng cách chuyển nó tới Phương thức Square () và những thay đổi đó sẽ được phản ánh trong phương thức Main (). 

No comments:

Post a Comment