C#学习系列-类与结构的区别

简介: 原文:C#学习系列-类与结构的区别参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9830&ct=31038 如有问题,欢迎指正 类:引用类型,存储在堆中,栈中存储引用地址,在方法的传输中只是传输地址的引用,修改指向的对象会影响原有对象的值,传输中消耗内存小。
原文: C#学习系列-类与结构的区别

参考: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; }

 

目录
相关文章
|
4月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
228 0
|
4月前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
104 7
|
4月前
|
开发框架 安全 .NET
C#面:Server.UrlEncode、HttpUtility.UrlDecode的区别
通过上述详细的解释和实例分析,相信大家对 `Server.UrlEncode` 和 `HttpUtility.UrlDecode` 的区别有了更深刻的理解,并能在实际开发中灵活运用。
115 0
|
5月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
93 1
|
5月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
349 0
|
5月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
25 0
|
5月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
262 1
|
5月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
149 8
|
3月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
132 12
|
4月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
144 4