C#_Struct与Class的差异

这篇具有很好参考价值的文章主要介绍了C#_Struct与Class的差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述

struct属于值类型,class属于引用类型

存储地址

struct储存于栈,class储存于堆(class于栈中储存引用)

传参性质

struct属于值传递,在函数内对参数进行修改,不会修改struct

class处于引用传递,在函数内对参数进行修改,会修改class

注:若想令struct具有引用传递的特性,可利用ref关键字(reference 引用)

示例代码

 不使用ref关键字:

    internal class Program
    {
        static void Main(string[] args)
        {
            X  x = new X();
            add(x);
            Console.WriteLine("跳出add方法后,num的值为:" + x.num);
        }

        public static void add(X x)
        {
            x.num += 1;
            Console.WriteLine("在add方法中,num的值为:" + x.num);
        }
    }

    public struct X
    {

        public int num = 1;
        public X()
        {
        }
    }

C#_Struct与Class的差异

 使用ref关键字(声明函数与传入参数时均需要添加ref关键字):

    internal class Program
    {
        static void Main(string[] args)
        {
            X  x = new X();
            //传入参数时需要添加ref关键字
            add(ref x);
            Console.WriteLine("跳出add方法后,num的值为:" + x.num);
        }

        //声明函数时需要添加ref关键字
        public static void add(ref X x)
        {
            x.num += 1;
            Console.WriteLine("在add方法中,num的值为:" + x.num);
        }
    }

    public struct X
    {
        public int num = 1;

        public X()
        {
        }
    }

C#_Struct与Class的差异

所以需要注意的是,并不是在声明struct时为其添加ref关键字

继承规则

struct默认继承于Object类,class若无显式基类,也继承于Object类

struct无法继承struct与class,但可实现数个interface

public struct x : interface_1,interface_2,interface_3

class至多可继承一个class,无法继承struct,也可实现数个interface,但是基类需要排在所有interface之前

public class x : class_1,interface_1,interface_2

构造函数

若struct具有已初始化的字段,则必须显式声明构造函数(即使是空函数),class则不需要文章来源地址https://www.toymoban.com/news/detail-436816.html

    public struct x
    {
        int num = 1;

        public x()
        {
        }
    }

到了这里,关于C#_Struct与Class的差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++面试八股文:struct、class和union有哪些区别?

    某日小二参加XXX科技公司的C++工程师开发岗位5面: 面试官:struct和class有什么区别? 小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。 面试官:struct、class和union有哪些区别? 小二:union和struct、class在内存布

    2024年02月07日
    浏览(54)
  • 【C++】类和对象 - 封装 - 属性和行为,访问权限,class 和 struct区别,成员属性私有化

    No. Contents 1 【C++】基础知识 - HelloWorld,注释,变量,常量,,标识符 2 【C++】数据类型 - 整型,sizeof,实型,字符型,转义字符,字符串类型,布尔类型,数据的输入 3 【C++】运算符 - 算术运算符,赋值运算符,比较运算符,逻辑运算符 4 【C++】程序流程结构 - 循序结

    2024年02月07日
    浏览(47)
  • Rust 数据类型 之 结构体(Struct)

    目录 结构体(Struct) 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体(Unit Struct) 元组结构体(Tuple Struct) 具名结构体(Named Struct) 结构体嵌套 结构体方法 例1:结构体转换为字符串描述 例2:矩形的周长和面积 例3:结构体字段的更新与输出 关联函数 结构体

    2024年02月16日
    浏览(48)
  • xlua源码分析(五) struct类型优化

    上一节我们分析了xlua是如何实现lua层访问C#值类型的,其中我们重点提到了xlua默认实现方式下,struct访问的效率问题。实际上,xlua还提供了两种优化的方式,可以大大提高struct访问的性能。具体例子在Examples 12_ReImplementInLua中。 第一种优化方式就是在lua层改造C#的struct,C#

    2024年01月18日
    浏览(35)
  • Golang struct 结构体指针类型 / 结构体值类型

    结构体变量之间的赋值是值拷贝。 当需要通过变量去修改另外一个结构体内容的时候,可以通过传递地址的方式来达到这个效果。 这样使用肯定是不对的,因为.的运算优先级要高,所以先会去执行p2.age,之后又取地址,所以这个就不行。 在代码执行的时候先执行.的操作,

    2024年02月13日
    浏览(42)
  • 第117篇 remix 中 struct 类型传参

    remix 中,结构体显示为 tuple ,使用\\\'[]\\\'标识一个对象; 合约示例: 在 remix 部署合约,并调用:

    2024年02月13日
    浏览(34)
  • Hive中的复杂数据类型 - array、map、struct

    水善利万物而不争,处众人之所恶,故几于道💦 一、简单数据类型(复习) 官方数据类型详情页 数据类型 描述 范围 tinyint 1byte有符号整数 from -128 to 127 smallint 2byte有符号整数 from -32,768 to 32,767 int 4byte有符号整数 from -2,147,483,648 to 2,147,483,647 bigint 8byte有符号整数 from -9,223,37

    2024年03月12日
    浏览(53)
  • Linux系统struct input_event结构体分类型(鼠标、键盘、触屏)详解与例子

    目录 一、概述 二、结构体字段解析 三、不同类型地解释字段  3.1 鼠标事件  3.2 键盘事件  3.3 触摸屏事件 四、使用 struct input_event 读取设备文件的例子 Linux系统是通过 输入子系统 来管理输入设备(如鼠标、键盘、触摸屏、游戏摇杆)的。配置了内核支持且安装对应驱动

    2024年02月16日
    浏览(42)
  • struct和typedef struct的区别

    在了解struct和typedef struct之前,我们先学习下typedef的定义和用法。 typedef为C语言的,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 C语言里typedef的解释是用来声明新的类型名来代替已有的类姓

    2024年02月10日
    浏览(42)
  • C++ 语言类 (class) 和抽象数据类型 (abstract data type)

    在 C++ 语言中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决问题中的各种概念,从而使得程序更加简洁旦易于修改。数据抽象能帮助我们将对象的具体实现与对象所能执行的操作分离开来。 类的两项基本能力:一是数据抽象,即定义数据成员和函数成员

    2023年04月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包