参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9830&ct=31038

如有问题,欢迎指正

类:引用类型,存储在堆中,栈中存储引用地址,在方法的传输中只是传输地址的引用,修改指向的对象会影响原有对象的值,传输中消耗内存小。

结构:值类型,存储在堆栈中,传输过程中传输整个对象的副本,修改指向对象的值不会影响原有的对象,传输中消耗内存大。

下面贴代码

    class Program
{
static void Main(string[] args)
{
/*声明类对象 并赋值10*/
TestClass TC1 = new TestClass();
TC1.x = 10;
TC1.y = "10";
Console.WriteLine("/*声明类对象TC1 并赋值10*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
TC1.x = 20;
TC1.y = "20";
Console.WriteLine("/*修改类对象 TC1 值为20*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y); /*执行类传递 并修改传递后的值*/
Console.WriteLine("/*创建类对象 TC2 指向 TC1,并修改 值为10*/");
TestClass TC2 = TC1;
TC2.x = 10;
TC2.y = "10";
Console.WriteLine("/*类传输过程中传递的是存储在堆栈中的引用地址 传输中消耗内存小 并没有传送存储在堆中的值 所以原有对象受到影响*/");
Console.WriteLine("TC1 x={0} y={0}", TC1.x, TC1.y);
Console.WriteLine("TC2 x={0} y={0}", TC2.x, TC2.y); /*声明结构对象*/
Console.WriteLine("/*声明结构对象TS1 并赋值10*/");
TestStruct TS1 = new TestStruct();
TS1.x = 10;
TS1.y = "10";
Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
Console.WriteLine("/*修改结构对象 TS1 值为20*/");
TS1.x = 20;
TS1.y = "20";
Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
/*执行结构传递 并修改传递后的值*/
Console.WriteLine("/*创建结构对象 TS2 指向 TS1,并修改 值为10*/");
TestStruct TS2 = TS1;
TS2.x = 10;
TS2.y = "10";
Console.WriteLine("/*结构传输过程中 会传递整个对象的副本 传输中消耗内存大 所以修改对原有对象不受影响*/");
Console.WriteLine("TS1 x={0} y={0}", TS1.x, TS1.y);
Console.WriteLine("TS2 x={0} y={0}", TS2.x, TS2.y); Console.ReadLine();
}
}
public class TestClass
{
public int x;
public string y;
}
public struct TestStruct
{
public int x;
public string y;
}

C#学习系列-类与结构的区别的更多相关文章

  1. 2017年11月4日 vs类和结构的区别&哈希表&队列集合&栈集合&函数

    类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比 ...

  2. Swift语法学习之 类和结构体

    类和结构体 本页包括内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自 ...

  3. swift 学习- 10 -- 类和结构体

    // '类和结构体' 是人们构建代码所使用的一种通用且灵活的构造体, 我们可以使用完全相同的语法规则来为 '类和结构体' 定义属性 (变量 和 常量) 和添加方法, 从而扩展 类和结构体 的功能 // ...

  4. Swift 学习笔记 (类和结构体)

    类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...

  5. C#学习系列-String与string的区别

    参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9832&ct=31042 如 ...

  6. C#:类和结构的区别

    第一.引用类型和值类型 类属于引用类型,而结构属于值类型. 结构在赋值时进行复制. 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据. 第二.继承性 类可以继承类 ...

  7. C#学习系列-out与ref的区别

    参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9839&ct=31056 如 ...

  8. C#学习系列-文章导航

    C#学习系列-.NET体系结构 C#学习系列-类与结构的区别 C#学习系列-String与string的区别 C#学习系列-抽象方法与虚拟方法的区别 C#学习系列-out与ref的区别 C#学习系列- ...

  9. swift 类和结构体

    1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...

随机推荐

  1. 清除路由器NAT地址转换

    首先当你的NAT网络地址转换成功搭建起来,并且测试过网络通信时,此时NAT地址转换表上面是存在转换信息的,你可以通过在特权模式下输入命令"show ip nat translation&qu ...

  2. css3 2D动画的基本用法和介绍

    <style> body{height:400px;border:1px solid #000;} .box{width:90px;height:30px;border:1px solid ...

  3. iOS和Android测试区别

    1.      Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.      多分辨率测试,Android端20多种,ios较少: 3.      手机操作系统,Andro ...

  4. 如何牢记C/C++中const的用法?

    (下面以 typename 表示C/C++内某一类型 我常常会搞混 const 放在 typename* 的前面和后面的区别,今天特地查看了它们两个各自的含义,总结了一下: const typenam ...

  5. [UCSD白板题] Covering Segments by Points

    Problem Introduction You are given a set of segments on a line and your goal is to mark as few point ...

  6. iOS开发零基础--Swift篇 循环

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

  7. 你好,欢迎来到我的博客,我是博主royalmice1

    你好,欢迎来到我的博客,我是博主royalmice

  8. 拾遗——java多线程

    由于sleep()方法是Thread类的方法,因此它不能改变对象的机锁.所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这 ...

  9. python 调用nmap

    1.系统中需要安装nmap 2.系统中安装pip 2.安装python调用nmap的lib包 命令为:pip install python-nmap 以下是在centos系统下安装成功后的截图 在命令 ...

  10. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...