全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅析C#中结构与类的区别

一、

  •    结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中
  •     类   :引用类型,存储在堆中,位于计算机内存的不同逻辑位置

二、

  •   较小的数据使用结构;
  •   将一个结构值传递到方法时,传递的是整个数据结构;
  •   传递一个类,实际上是将引用传递到对象,即只有内存地址;
  •   对结构修改,改变的是结构的副本,这是值类型工作方式的定义:传递值的副本;
  •   传递一个引用到类本身意味着在类中修改值,实际上改变的是原始对象;

三、代码例子

1.新建 PointClass.cs

namespace StructAndClass
{
 internal class PointClass
 {
 public PointClass(int x, int y)
 {
  X = x;
  Y = y;
 }
 public int X { get; set; }
 public int Y { get; set; }
 }
}

2.新建 PointStruct.cs

namespace StructAndClass
{
 internal struct PointStruct
 {
 public int X { get; set; }
 public int Y { get; set; }
 public PointStruct(int x, int y)
 {
  X = x;
  Y = y;
 }
 }
}

3.Program.cs

using System;
namespace StructAndClass
{
 internal class Program
 {
 private static void Main(string[] args)
 {
  Console.WriteLine("PointStruct =====");
  var pStruct = new PointStruct(10, 10);
  Console.WriteLine("初始值:x={0},y={1}", pStruct.X, pStruct.Y);
  ModifyPointStruct(pStruct);
  Console.WriteLine("调用 ModifyPointStruct() 后的值:x={0},y={1}", pStruct.X, pStruct.Y);
  Console.WriteLine();
  Console.WriteLine("PointClass =====");
  var pClass = new PointClass(10, 10);
  Console.WriteLine("初始值:x={0},y={1}", pClass.X, pClass.Y);
  ModifyPointClass(pClass);
  Console.WriteLine("调用 ModifyPointClass() 后的值:x={0},y={1}", pClass.X, pClass.Y);
  Console.Read();
 }
 private static void ModifyPointStruct(PointStruct point)
 {
  Console.WriteLine("调用方法:ModifyPointStruct");
  point.X = 20;
  point.Y = 20;
  Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
 }
 private static void ModifyPointClass(PointClass point)
 {
  Console.WriteLine("调用方法:ModifyPointClass");
  point.X = 20;
  point.Y = 20;
  Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
 }
 }
}

4.结果:

【解析】

ModifyPointStruct(PointStruct point) 调用时修改的只是结构副本,所以原来的结构并没有发生变化;  

ModifyPointClass(PointClass point) 调用时所修改的对象是原对象,因为参数传递过来的是一个引用地址,这地址指向原对象

四、总结

结构是值类型并在堆栈中传递,每次使用方法进行修改的都只是结构副本;

至于类,传递的是内存地址的引用,修改的就是初始值

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# C#  # 结构  #   # 区别  # 轻松学习C#的结构和类  # C#基础语法:结构和类区别详解  # C#中类与结构的区别实例分析  # C#枚举类型与结构类型实例解析  # 基于c# 类、接口、结构的联系与区别详解  # 深入c# 类和结构的区别总结详解  # c#结构和类的相关介绍  # C#类和结构详解  # 的是  # 这是  # 并在  # 数据结构  # 较小  # 类中  # 堆中  # class  # brush  # cs  # pre  # csharp  # internal  # StructAndClass  # namespace  # public  # PointClass  # li  # nbsp  # strong 


相关文章: 在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  TestNG的testng.xml配置文件怎么写  代购小票制作网站有哪些,购物小票的简要说明?  h5在线制作网站电脑版下载,h5网页制作软件?  网站制作服务平台,有什么网站可以发布本地服务信息?  网站专业制作公司有哪些,做一个公司网站要多少钱?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  网站网页制作专业公司,怎样制作自己的网页?  建站之星导航菜单设置与功能模块配置全攻略  宝塔建站教程:一键部署配置流程与SEO优化实战指南  网站制作公司,橙子建站是合法的吗?  ,巨量百应是干嘛的?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何在新浪SAE免费搭建个人博客?  建站之星如何修改网站生成路径?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星后台密码遗忘?如何快速找回?  已有域名能否直接搭建网站?  javascript基本数据类型及类型检测常用方法小结  大学网站设计制作软件有哪些,如何将网站制作成自己app?  重庆市网站制作公司,重庆招聘网站哪个好?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何快速搭建高效服务器建站系统?  如何解决ASP生成WAP建站中文乱码问题?  如何彻底删除建站之星生成的Banner?  如何在万网自助建站平台快速创建网站?  股票网站制作软件,网上股票怎么开户?  网站图片在线制作软件,怎么在图片上做链接?  建站之星如何取消后台验证码生成?  如何选择香港主机高效搭建外贸独立站?  建站org新手必看:2024最新搭建流程与模板选择技巧  nginx修改上传文件大小限制的方法  建站之星后台密码遗忘或太弱?如何重置与强化?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何做静态网页,sublimetext3.0制作静态网页?  如何快速搭建高效香港服务器网站?  制作宣传网站的软件,小红书可以宣传网站吗?  宝塔Windows建站如何避免显示默认IIS页面?  如何快速查询域名建站关键信息?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  公司门户网站制作流程,华为官网怎么做?  建设网站制作价格,怎样建立自己的公司网站?  模具网站制作流程,如何找模具客户?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何快速启动建站代理加盟业务?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何快速使用云服务器搭建个人网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。