C#预定义数据类型之值类型和引用类型介绍

C#预定义数据类型之值类型和引用类型介绍

一、值类型和引用类型的区别

在C#中,数据类型可以分为值类型和引用类型两种。

值类型表示的是实际的值,它们被存储在堆栈中。当在一个方法中传递值类型之间的参数时,它们会被复制一份,因此赋予新值时不会影响原始的值。 值类型的数据包括:

  • 布尔型(bool);
  • 数字类型: 整型(byte、sbyte、short、ushort、int、uint、long、ulong)、浮点型(float、double、decimal);
  • 字符类型(char).

引用类型是指数据是“指向”其他内存地址的指针,它们被存储在堆中。当在方法中传递引用类型之间的参数时,它们是指向同一个内存地址,赋予新值时会影响原始值。 引用类型的数据包括:

  • 类(class);
  • 接口(interface);
  • 委托(delegate);
  • 数组 (array)等.

二、值类型和引用类型的声明和使用

1. 值类型的声明和使用

我们可以使用以下语句来声明和初始化值类型的变量:

int number = 100; // 声明一个 int 类型的变量并将其初始化为 100
double price = 12.99; //声明一个 double 类型的变量并将其初始化为12.99
char ch = 'A'; //声明一个 char 类型的变量并将其初始化为字符 A

值类型可以使用运算符和方法进行处理,例如:

int x = 10;
int y = 20;
int z = x + y; // 相加,z = 30

2. 引用类型的声明和使用

我们可以使用以下语句来声明引用类型的变量:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Student stu1 = new Student(); // 声明一个类型为 Student 的对象

引用类型需要使用“new”运算符来分配内存空间。我们可以使用“.”运算符来访问引用类型的变量的属性和方法,例如:

stu1.Name = "Tom";
stu1.Age = 18;

三、值类型和引用类型的传递方式

方法可以使用值类型或引用类型的参数。当使用值类型作为参数时,将传递变量的一份副本;当使用引用类型作为参数时,将传递变量的指针。以下示例演示了如何在方法中传递值类型和引用类型:

public class Program
{
    static void Main(string[] args)
    {
        int num1 = 10;
        int num2 = 20;
        Swap(num1, num2);
        Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2); // num1 = 10, num2 = 20

        Student stu2 = new Student() { Name = "Jack", Age = 20 };
        ChangeName(stu2);
        Console.WriteLine("Name = {0}, Age = {1}", stu2.Name, stu2.Age); // Name = Tom, Age = 20
    }

    public static void Swap(int x, int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }

    public static void ChangeName(Student stu)
    {
        stu.Name = "Tom";
    }
}

在该示例中,Swap方法通过值类型传递了num1和num2的副本,因此在方法中交换它们的值不会影响原始值;而ChangeName方法通过引用类型修改了stu2的属性值,因此在方法外的属性值也被更改。

四、总结

C#语言中分为值类型和引用类型两种数据类型。值类型被复制,而引用类型则是通过地址引用的。值类型具有简单、高效的特点,引用类型与面向对象编程相关,更灵活、功能更强大。

在使用值类型和引用类型时,需要了解它们的区别和使用方式,根据具体需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#预定义数据类型之值类型和引用类型介绍 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C# 正则表达式常用的符号和模式解析(最新推荐)

    C# 正则表达式常用的符号和模式解析(最新推荐) 前言 正则表达式是一种灵活有强大的工具,可用于输入验证、搜索替换以及字符串处理等方面。在C#编程中,正则表达式提供了非常好用而且高效的支持。本文将详细讲解C#中正则表达式的常用符号和模式,帮助大家更好地掌握正则表达式的使用。 常用的符号 普通字符 普通字符是指没有特殊含义的字符,比如数字、字母、特殊字符等等。…

    C# 2023年5月15日
    00
  • C#实现简单串口通讯实例

    下面是详细讲解“C#实现简单串口通讯实例”的完整攻略: 1. 前置知识 在学习本文之前,你需要了解以下内容: C#基础语法 串口通讯基础知识 2. 准备工作 在开始实现串口通讯之前,我们需要准备以下工作: 串口设备(如果你没有可以模拟串口设备) 串口通讯库(本文使用SerialPort类) 首先,我们需要创建项目并引入System.IO.Ports命名空间,…

    C# 2023年5月15日
    00
  • Asp.Net中的字符串和HTML十进制编码转换实现代码

    下面我将详细讲解如何在 Asp.Net 中实现字符串和 HTML 十进制编码的转换。 什么是字符串和 HTML 十进制编码? 在 Asp.Net 中,字符串就是一串字符(可以包含字母、数字、符号等),我们可以将其在程序中进行处理、传递和展示。而 HTML 十进制编码则是将字符按照其在 ASCII 表中对应的值进行转化,用十进制数字表示。 用 Asp.Net …

    C# 2023年5月31日
    00
  • C#环形缓冲区(队列)完全实现

    感谢您对C#环形缓冲区(队列)的关注。在这里,我将为您提供一份详细的攻略,让您可以快速入门并掌握C#环形缓冲区(队列)的完全实现。 简介 环形缓冲区,也称为环形队列,是一种非常重要的数据结构,它有很多应用场景,例如缓冲区、循环播放、事件队列等。 C#环形缓冲区是一种很常见的环形队列实现方式。它提供了一系列方法来方便地添加或者移除元素,以及遍历整个队列和判断队…

    C# 2023年5月15日
    00
  • 如何在C#中使用注册表

    当我们需要在程序中保存一些配置信息,或者获取系统设置时,可以使用注册表来存储和读取这些信息。在C#中,我们可以利用Microsoft.Win32命名空间提供的类来操作注册表。 1. 引用命名空间 在使用注册表之前,首先需要引用Microsoft.Win32命名空间。可以在文件头部使用using语句引入命名空间: using Microsoft.Win32; …

    C# 2023年5月31日
    00
  • C# CultureInfo之常用InvariantCulture案例详解

    C# CultureInfo之常用InvariantCulture案例详解 什么是CultureInfo CultureInfo是用于表示特定区域性的类。在C#中,可以使用CultureInfo类来处理不同语言和国家的格式。 使用CultureInfo可以将数字、日期、货币和字符串等数据格式转换为不同的语言和国家的格式。 InvariantCulture I…

    C# 2023年6月1日
    00
  • PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用

    下面我会给您详细讲解 “PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用”的完整攻略。 一、什么是“重构”、“简化函数调用”的概念? 重构是指对既有代码进行修改,以改善其结构,使得代码更易于理解、更容易扩展、更符合设计模式等目的。 而简化函数调用,则是指通过改进函数的接口和参数列表,使得函数调用更为简洁、清晰可读。 二、如何进行函数调用的简化? 在…

    C# 2023年6月6日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)

    在前两篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) 我们对.netcore部署到linux有了一个充分的了解,已经可以满足应用要求了,这篇文章我们继续深入带你了解使用Doker+jexus或Nginx来部署.net co…

    C# 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部