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

原文: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;
    }

 

时间: 2024-10-21 22:43:59

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

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

原文:C#学习系列-String与string的区别 参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9832&ct=31042 如有错误,欢迎指正 String:类,System.String string:类型,变量 两者本质上没有任何区别,都是System.String,string只是System.String的别名而已 唯一的区别在于如何按照代码约定的来写,如声明变量时使用小

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

原文:C#学习系列-out与ref的区别 参考:http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=9851&m=9839&ct=31056 如有错误,欢迎指正 Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别. 但Out传递到方法体时,参数会清空,这意味着在方法体内使用Out参数前必须赋值. 而Ref传递到方法体时,其参数也是一起被传递进来,所以作为Ref参数传递,方法体

C++ protected权限成员以及类和结构体区别

我们已经知道在C++类中默认的访问权限是private,在C++结构体中默认的访问权限是public 其实在C++中类和结构体没有严格的界限,区别如上. 那么这里说明一下protected权限. 这个protected访问权限只是说明外部调用函数不能直接调用类成员,但是继承类确能够直接访问. 我们知道基类的private成员继承类不能直接调用,必须通过public方法进行调用, 这里又多了一项可以继承类可以通过protected方法进行调用 如下 class normalu {        

《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?

原创文章,欢迎转载.转载请注明:关东升的博客   类和结构体非常相似,很多情况下没有区别.如果你是设计人员在进行系统设计时候,是将某种类型设计成为类还是结构体?  类和结构体异同: 类和结构体都有如下功能: 定义存储属性 定义方法 定义下标 定义构造函数 定义扩展 实现协议  只有类才有的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个实例有多个引用  选择的原则: 结构体是值类型,每一个实例没有独一无二的标识,下面两个数组实例本质上没有区别,他们可以互相

ABP架构学习系列一 整体项目结构及目录

本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习. abp的源码分析学习主要来源于 HK Zhang ,他的博客是https://www.cnblogs.com/1zhk/ 一.什么是ABP ASP.NET Boilerplate(ABP)是现代新的Web应用程序的最佳实践和最流行的工具的起点.它的目标是实体模型.通用应用程序框架和项目模板. ABP是一个建立在最新的ASP.NET的MVC和W

《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

 原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 {     定义类的成员 } struct 结构体名 {     定义结构体的成员 } 从语法格式上看,Swift中的类和结构体的定义更类似于Java语法,不需要像C++和Objective-C那样把接口部分和实现部分放到不同的文件中. 下面来看一个示例: class Employee { //

[UML]UML系列——类图class的关联关系(聚合、组合)

关联的概念       关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation)       假设:一个公司只有三名员工:一个员工要么没有工作,要么只能在一个公司工作.(代码简化了,主要说明关联关系)       Person类: 1 class person 2 { 3 public string name; 4 public person(string eName) 5 { 6

类和结构体解析

本系列文章导航 创建一个示例和WebMethod特性解析 WebService特性和数组类型解析 类和结构体解析 利用YAHOO公开API做天气预报Web服务 Webservice 的设计和模式 Remoting和Webservice的区别 现在开始学习Web服务,写下自己学习过程中的一些感受,拿出来与大家分享,欢迎批评指正.希望能给跟我一样初学Web服务的朋友一些帮助. 今天学习了Web服务的类和结构体一节,晚上写下自己所理解的内容,跟大家一起分享了.请批评指正. Web服务能够把用户定义的类

[UML]UML系列——类图class的依赖关系

相关文章          [UML]UML系列--用例图Use Case       [UML]UML系列--用例图中的各种关系(include.extend)       [UML]UML系列--类图Class       [UML]UML系列--类图class的关联关系(聚合.组合) 依赖关系的概念与符号        依赖表示一个类以某种形式依赖于其他类.当两个类处于依赖关系中时,其中一个类的改变可能会影响另一个类.        符号:   依赖关系在代码中的表现       在程序代