一、
     结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中
     类   :引用类型,存储在堆中,位于计算机内存的不同逻辑位置
 
二、
     较小的数据使用结构;
     将一个结构值传递到方法时,传递的是整个数据结构;
     传递一个类,实际上是将引用传递到对象,即只有内存地址;
     对结构修改,改变的是结构的副本,这是值类型工作方式的定义:传递值的副本;
     传递一个引用到类本身意味着在类中修改值,实际上改变的是原始对象;
 
三、代码栗子
  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(, );
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(, );
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 = ;
point.Y = ;
Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
} private static void ModifyPointClass(PointClass point)
{
Console.WriteLine("调用方法:ModifyPointClass");
point.X = ;
point.Y = ;
Console.WriteLine("修改成的值:x={0}, y={1}", point.X, point.Y);
}
}
}

  4.结果:

【解析】

  ModifyPointStruct(PointStruct point) 调用时修改的只是结构副本,所以原来的结构并没有发生变化;  
  ModifyPointClass(PointClass point) 调用时所修改的对象是原对象,因为参数传递过来的是一个引用地址,这地址指向原对象

四、总结

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

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

C#:浅析结构与类的区别的更多相关文章

  1. .NET中结构和类的区别

    最近在学习Swift语言,看到了枚举这一章,Swift可以支持在枚举中定义方法...于是想到了回顾一下.NET中枚举.结构.类之间区别. 枚举在.NET较为简单,这里就不作比较,只谈谈结构和类. 1. ...

  2. C#中结构与类的区别

    一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...

  3. C#基础知识 结构与类的区别

    网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细.不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆. (前提:对于值类型与引用类型有一定的认识) 结构最重要 ...

  4. C++中结构和类的区别

    首先从从语言角度来看,c语言是一种结构化的语言,便于按照模块化的方式来组织程序,易于程序员的调试和维护,而对于c++来说,我么可以认为它是标准c的超集.实际上所有的c程序也是c++程序.但两者之间还是 ...

  5. .net(C#)中结构和类的区别

    static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...

  6. C# 结构与类的区别

    一.定义方式 定义结构: struct PointStruct //默认的访问权限是 public { public int X { get; set; } public int Y { get; s ...

  7. C# 结构与类

    结构是一种可以包含数据成员和方法成员的值类型数据结构.为结构分配数据时不需要从托管堆中分配内存,结构类型的变量直接包含了该结构的数据.结构中可以包含构造函数,常量,字段方法,属性,运算符,事件和嵌套类 ...

  8. C#中结构体和类的区别

    结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题:这两种数据类型的本质区别主要是各自指向的 ...

  9. C#中的结构体与类的区别

    经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...

随机推荐

  1. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  2. 转:聊聊mavenCenter和JCenter

    Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢? maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的 ...

  3. css text-fill-color与text-stroke讲解

    顾名思义"text-fill-color"就是文字填充颜色而"text-stroke"就是文字描边.还别说,两个属性可以制作出各种炫酷的文字效果,不过IE系列都 ...

  4. Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V

    在学习CGlib动态代理时,遇到如下错误: Exception in thread "main" java.lang.NoSuchMethodError: org.objectwe ...

  5. AFNetworking报错"_UTTypeCopyPreferredTagWithClass", referenced from: _AFContentTypeForPathExtens

    问题: 在和Unity交互的过程中,从Unity开发工具打包出来的项目文件,在添加AFNetworking库,运行时报出以下错误: Undefined symbols for architecture ...

  6. 【iOS10 SpeechRecognition】语音识别 现说现译的最佳实践

    首先想强调一下“语音识别”四个字字面意义上的需求:用户说话然后马上把用户说的话转成文字显示!,这才是开发者真正需要的功能. 做需求之前其实是先谷歌百度一下看有没有造好的轮子直接用,结果真的很呵呵,都是 ...

  7. 基于SOA架构的TDD测试驱动开发模式

    以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...

  8. postgresql 基本语法

    postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...

  9. 【python之路3】if 语句

    1.if语句用法(if....else....) #!/usr/bin/env python # -*- coding:utf-8 -*- my_name = raw_input("plea ...

  10. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...