当前位置: 首页 > news >正文

C#类和结构体的区别

1、类class是引用类型,多个引用类型变量的值会互相影响。存储在堆(heap)上

2、结构体struct是值类型,多个值类型变量的值不会互相影响。存储在栈(stack)上

结构
关键字classstruct
类型引用类型值类型
存储位置托管 堆(heap)上栈(stack)上
语法都使用new来说明实例都使用new来说明实例

using System;
using System.Collections.Generic;
using System.Text;namespace VariableScopeSample3
{class Vector{int value;public  int Value { get; internal set; }}
}
using System;
using System.Collections.Generic;
using System.Text;namespace VariableScopeSample3
{struct Point{public int X { get; internal set; }public int Y { get; internal set; }}
}
using System;namespace VariableScopeSample3
{class Program{static int j = 20;static int Main(string[] args){int j = 30;Console.WriteLine(j);// return 0;Vector x, y;x = new Vector();x.Value = 30;//value is a field defind in Vector classy = x;Console.WriteLine(y.Value);y.Value = 50;Console.WriteLine(x.Value);Console.WriteLine("--------------------");Point a,b;a = new Point();a.X = 30;b = new Point();//下面有赋值,所以这里可省略b = a;Console.WriteLine(b.X);b.X = 50;Console.WriteLine(a.X);Console.WriteLine(b.X);return 0;}}
}

在C#中,结构体(struct)是值类型,这意味着它们在赋值时是通过值复制的方式来传递的

  1. Point a, b; 声明了两个 Point 类型的变量 a 和 b。由于结构体是值类型,这两个变量会被初始化为默认值(在本例中,X 和 Y 都是 0)。

  2. a = new Point(); 创建了一个新的 Point 实例,并将其赋值给变量 a

  3. a.X = 30; 将 a 的 X 属性设置为 30

  4. b = new Point(); 创建了另一个新的 Point 实例,并将其赋值给变量 b。这一步实际上不是必需的,因为你紧接着就重写了 b 的值。

  5. b = a; 将 a 的值复制给 b。由于结构体是按值传递的,这里发生的是 a 的值(此时 X 是 30)被复制给 b

  6. Console.WriteLine(b.X); 打印 b 的 X 属性,输出 30

  7. b.X = 50; 将 b 的 X 属性设置为 50。由于 b 是 a 的一个副本,这个操作不会影响 a

  8. Console.WriteLine(a.X); 打印 a 的 X 属性,输出 30,因为 a 和 b 是独立的副本。

  9. Console.WriteLine(b.X); 再次打印 b 的 X 属性,输出 50

关于 b = new Point(); 这一行代码可以省略的问题:

因为在执行 b = a; 之前,b 的值并不重要,因为它会被立即覆盖。省略这一行代码不会影响程序的行为,因为 b 会在赋值时得到 a 的副本。

http://www.lryc.cn/news/413985.html

相关文章:

  • 【RabbitMQ】RabbitMQ持久化
  • 算法刷题笔记 Kruskal算法求最小生成树(详细算法介绍,详细注释C++代码实现)
  • 5年经验的软件测试人员,碰到这样的面试题居然会心虚......
  • C#进阶-轻量级ORM框架Dapper的使用教程与原理详解
  • Windows图形界面(GUI)-MFC-C/C++ - 编辑框(Edit Control) - CEdit
  • 网络安全防御【IPsec VPN搭建】
  • java环境配置与tomcat的配置
  • OD C卷 - 来自异国的客人/幸运数字
  • C++ | 动态内存管理 new、delete (用法、底层)详解
  • 【C语言】结构体内存布局解析——字节对齐
  • 模型表达方式
  • 校园课程助手【4】-使用Elasticsearch实现课程检索
  • 经典运维面试题
  • 别再盲目推广了!Xinstall助你开启App线下推广新篇章
  • 大厂linux面试题攻略五之数据库管理
  • 【pytorch】模型集成
  • 初识集合和数据结构
  • cocos creator 3.x中动态加载 resources 文件夹下的图片时提示找不到
  • 第九十八周周报
  • 程序员找工作之数据结构面试题总结分析
  • 设置provider解决maven找不到JUnit 5测试样例
  • php反序列化靶机serial实战
  • 类型推断技术及仓颉语言实践
  • 职场生存秘籍:16条黄金法则
  • Flask 介绍
  • JAVA基础知识点3 (String 和 StringBuffer 以及 StringBuilder 的特点以及区别)
  • 2024年8月AI内容生成技术的现状与未来:从文生文到跨模态交互的全景分析
  • File 34
  • AI全知道-Embedding model中的Vector知识点
  • Qt 学习第四天:信号和槽机制(核心特征)