首页 > 编程语言 >C# 结构体学习研究

C# 结构体学习研究

时间:2023-04-23 12:11:24浏览次数:27  
标签:Name C# CE 学习 se public SE 结构

internal class TestStruct {
        /// <summary>
        /// 结构体
        /// </summary>
        struct StructEntity {
            public int ID { get; set; }
            public string Name { get; set; }
        }
        /// <summary>
        /// 类
        /// </summary>
        class ClassEntity {
            /// <summary>
            /// 结构体作为类的成员会分配在类的堆中
            /// </summary>
            public StructEntity SE;
            public void ChangeSE() {
                SE.Name = "张九";
            }
            /// <summary>
            /// 通过返回值返回结构体
            /// </summary>
            /// <returns></returns>
            public StructEntity GetSE() {
                return SE;
            }
        }
        readonly ClassEntity CE = new ClassEntity();
        public void Test() {
            CE.SE = new StructEntity { //给结构赋值
                ID = 1,
                Name = "张三"
            };
            var se = CE.SE; //测试=赋值
            se.Name = "李四";
            Output(se);
            Test2(CE.SE); //测试参数传递
            var se1 = CE.GetSE(); //测试返回值
            se1.Name = "赵六";
            Output(se1);
            CE.ChangeSE(); //测试修改原数值
            Output(se1);
        }
        void Output(StructEntity se) {
            //传入的se也是个新的结构体
            Console.WriteLine(se.Name + " | 原始值:" + CE.SE.Name);
        }
        void Test2(StructEntity se) {
            se.Name = "王五";
            Output(se);
        }
    }

运行结果:

总结(只是个人的理解,可能有不正确的地方,如果有错误望指出):

1,结构体是值类型,每次赋值和传递都会创建一个新的结构体,修改新的结构体不会影响原数值,因此其具有不变性,感觉比较适合作为缓存的容器使用

2,使用结构体的时候可以将其理解成大号的int,因为int就是结构体

3,当结构体在方法中会存储在堆栈中,当作为引用类型的成员时会存在在该成员所在的堆中?(存疑)

4,当我们描述一个轻量级对象的时候,结构体可提高效率,成本更低,因此在存储大量小数据时可以使用结构体

5,结构体不能太大,因为结构体每次都要创建新的数据,太大的话得不偿失,反而用class更合适,因为class只传递一个引用,当类型定义大于16字节时不要选用struct

6,结构体作为参数传递和返回值时会创建新的,因此不要层层传递或返回结构体,复杂的结构体最好作为类的成员传递,尽量避免直接传递结构体本体

7,结构体不适合作为模型使用,比较适合作为小数据的容器使用

标签:Name,C#,CE,学习,se,public,SE,结构
From: https://www.cnblogs.com/luludongxu/p/17346170.html

相关文章

  • Docker 启动异常 不显示报错信息
    错误的启动配置sudodockerrun--rm-d\-p80:80-p443:443nginx执行结果为返回容器id,但容器未启动,无报错信息sudodockerrun--rm-itd\-p80:80-p443:443nginxbash执行结果为容器启动并在后台挂起,但nginx未启动成功,无报错信息sudodockerrun......
  • VSCode常用快捷键总结
    一、常用快捷键总结:1、shift+alt+f代码格式化2、ctrl+shift+恢复被关闭的vs窗口3、ctrl+b快捷打开侧边栏和关闭4、全选+tab多行缩进5、全选+tab+shift多行前进6、新建文件Ctrl+N二、同时打开多个窗口(查看多个项目)7、打......
  • mutex.Lock():是否需要加锁,何时加?
    流加锁,包不用加锁传输层的TCP是基于流的传输,需要加锁,应用层的WebSocket是基于包的传输,同时写也不会导致数据混乱,不需要加锁。所以,在*websocket.Conn.WriteJSON(data)时,不需要前后加锁以下代码中的mutex.Lock()没必要:wsc.mutex.Lock()//由于websocket不支持并发写入,所以需要......
  • 02-httprunner创建脚手架报错解决方法:httprunner: error: invalid choice: ‘startpro
      转载:https://blog.csdn.net/qq_33940095/article/details/128191841安装完httprunner版本4.1.3后进行创建脚手架是报错  经过百度发现是与python(3.7.6)版本不匹配.卸载httprunner重新安装低版本的httprunner卸载:pipuninstallHttpRunner  ......
  • docker一些常用命令
    dockerversion:查看Docker版本信息。该命令可以查看当前安装的Docker版本信息,包括Docker引擎、客户端、API等版本。dockerinfo:查看Docker的详细信息。该命令可以查看Docker的详细信息,包括容器、镜像、网络等。dockersearch:搜索DockerHub上的镜像。该命令可以在Docke......
  • centos部署.net5项目
    开发环境是vs2019创建一个.netcore项目 测试一下运行 然后发布到文件夹 将文件夹弄到服务器上安装.NET运行时sudorpm-Uvhhttps://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpmsudoyuminstalldotnet-sdk-5.0dotnet--info启动网站......
  • RBAC权限模型、建表及SQL语句编写
    RBAC权限模型RBAC权限模型(Role-BasedAccessControl)即:基于角色的权限控制。这是目前最常被开发者使用也是相对易用、通用权限模型。建表及SQL语句编写准备工作创建数据库SQL表CREATEDATABASE/*!32312IFNOTEXISTS*/`sg_security`/*!40100DEFAULTCHARACTERSETutf8......
  • CODEQL使用简介
    codeqlcodeql是一个可以对代码进行分析的引擎,安全人员可以用它作为挖洞的辅助或者直接进行挖掘漏洞,节省进行重复操作的精力下载:解析引擎:https://github.com/github/codeql-cli-binaries/releasesSDK(规则库):https://github.com/github/codeql使用方式简介:1.解压解析引擎,......
  • Tailscale 基础教程:部署私有 DERP 中继服务器(转)
    Sealos 在云桌面中管理Kubernetes集群生命周期,运行分布式应用程序 走,看看去!上篇文章介绍了如何使用 Headscale 替代Tailscale官方的控制服务器,并接入各个平台的客户端。本文将会介绍如何让Tailscale使用自定义的DERPServers。可能很多人都不知道 DERP 是个啥玩意......
  • Adobe Photoshop 2023(MAC+Windows) +AI插件auto Photoshop stable diffusion plugin
    Adobe图像处理软件Photoshop2023正式版(24.1.1)2023年01月版发布。AdobePhotoshop2023破解版(简称PS)是一款全球流行的专业图像处理软件及照片和设计软件。AdobePhotoshop中文破解版是AdobeCreativeCloud创意云桌面程序中心的图形设计软件热门产品,它是平面设计领域和数......