当前位置:  编程技术>.net/c#/asp.net

C#中类与结构的区别实例分析

    来源: 互联网  发布时间:2014-11-02

    本文导语:  类与结构是C#程序设计中基本的数据类型,而初学者往往不能很好的分清二者之间的区别。本文就以附带实例形式加以说明。具体如下: 一、基本概念: 类:引用类型,存储在堆中,栈中存储引用地址,在方法的传输中只是传...

类与结构是C#程序设计中基本的数据类型,而初学者往往不能很好的分清二者之间的区别。本文就以附带实例形式加以说明。具体如下:

一、基本概念:

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

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

二、实例代码如下:

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#学习笔记之C#结构
  • C#枚举类型与结构类型实例解析
  • 如何实现C#自定义结构的强制转换
  • C#中使用反射获取结构体实例及思路
  • C#中结构(struct)的部分初始化和完全初始化实例分析
  • 深入c# 类和结构的区别总结详解
  • C++联合体转换成C#结构的实现方法
  • c#结构和类的相关介绍
  • 深入探讨C#中的结构struct
  • C#学习笔记之用户定义类(或结构)的类型转换
  • c#分支与循环结构的实例解析
  • C#数据结构之循环链表的实例代码
  • 基于c# 类、接口、结构的联系与区别详解
  • c# DataTable与不同结构实体类转换的方法实例
  • C#数据结构揭秘一
  • C#数据结构与算法揭秘一
  • c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)
  • C#数据结构与算法揭秘二 线性结构
  • C#数据结构与算法揭秘三 链表
  • C#数据结构与算法揭秘四 双向链表
  • Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
  • 实例分析Java Class的文件结构
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C语言循环结构与时间函数用法实例教程
  • 实例讲解JSP Model2体系结构(上)
  • java基于包结构的请求路由实现实例分享
  • python数据结构之二叉树的建立实例
  • PHP循环结构实例讲解
  • python数据结构之二叉树的遍历实例
  • PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
  • 实例讲解JSP Model2体系结构(下)
  • python数据结构之二叉树的统计与转换实例
  • 实例讲解JSP Model2体系结构(中)
  • <<大话数据结构>>中冒泡排序算法改进
  • 请问:在用proc方式往数据库插入数据时,我能不能定义一个结构体,它与表的每一项对应,将结构体赋好值后,再只将这个结构体插入表中,这行不行啊?
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 全局结构体变量和全局结构体指针变量
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 《arm体系结构结构与编程》书如何
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • file结构和inode结构
  • mysql 命令大全及导入导出表结构或数据
  • 《莱昂氏UNIX源代码分析》中有一种结构体声明没有结构体名
  • 关于学籍管理系统B/S结构实现的结构问题
  • GCC 编译问题: 结构A中有个成员结构B??
  • 强人,linux下驱动相关数据结构和usb设备数据结构之间的功能分析
  • 谁能告诉我EJB的体系结构有哪些,这些体系结构的优缺点如何,万分感谢!
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • struct __una_u16结构是什么结构.
  • GNU汇编fill填充一个数据结构使得另一个数据结构全部清零
  • 高手帮帮忙!vi中如何实现跳转到任意结构体或函数的声明处,包括系统库中声明的函数和数据结构?
  • jbuilder7里如何在project pane里显示出某个project的所有的类的结构图,就如显示source java files的结构图一样
  • 关于客户服务器结构与浏览器服务器结构编程的比较
  • 有一个win32的结构体,大伙看看能否转换成linux下的基本等价的结构体?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3