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

 更新时间:2014年08月21日 09:03:32   投稿:shichen2014  
这篇文章主要介绍了C#中类与结构的区别,类与结构是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# 连接本地数据库的实现示例,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • WPF+ASP.NET SignalR实现后台通知功能的示例代码

    WPF+ASP.NET SignalR实现后台通知功能的示例代码

    本文以一个简单示例,简述如何通过WPF+ASP.NET SignalR实现消息后台通知以及数据的实时刷新,仅供学习分享使用,如有不足之处,还请指正
    2022-09-09
  • C#实现中文验证码的示例代码

    C#实现中文验证码的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现中文验证码功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 简单聊聊C#的线程本地存储TLS到底是什么

    简单聊聊C#的线程本地存储TLS到底是什么

    C#的ThreadStatic是假的,因为C#完全是由CLR(C++)承载的,言外之意C#的线程本地存储,用的就是用C++运行时提供的 __declspec(thread)或__thread来虚构的一套玩法,下面我们就来深入讲讲C#的线程本地存储TLS到底是什么吧
    2024-01-01
  • C#根据权重抽取随机数

    C#根据权重抽取随机数

    最近在开发过程中遇到一个需要做带权随机的处理,本文主要介绍了C#根据权重抽取随机数,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 使用aspose.word 第三方的插件实现导出word

    使用aspose.word 第三方的插件实现导出word

    本文给大家分享的是一个使用使用aspose.word 第三方的插件实现导出word的实例,十分的实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C#通过DataSet读写xml文件的方法

    C#通过DataSet读写xml文件的方法

    这篇文章主要介绍了C#通过DataSet读写xml文件的方法,涉及C#使用DataSet操作XML的相关技巧,方法简单实用,需要的朋友可以参考下
    2015-05-05
  • C#控件闪烁的解决方法

    C#控件闪烁的解决方法

    这篇文章主要介绍了C#控件闪烁的解决方法,涉及SetStyle函数的使用技巧,需要的朋友可以参考下
    2015-01-01
  • C#实现收发邮件功能

    C#实现收发邮件功能

    这篇文章介绍了C#实现收发邮件功能的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • c#中XML解析文件出错解决方法

    c#中XML解析文件出错解决方法

    在解析xml时,经常因为文件中含特殊字符而解析失败。原因有两个:一是内容中含有XML预定义好的实体,二是内容中含有低位非打印字符
    2014-08-08

最新评论