开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4263|回复: 4
收起左侧

[C#作业] 第九天作业

[复制链接]
发表于 2019-4-12 16:42:45 | 显示全部楼层 |阅读模式   广东省揭阳市

第九天课程作业

9.1 struct 结构的使用 与类的异同 内存分配 与 内存对齐
9.2 值传递与引用传递 ref 与 out 关键字

  1. 描述一下 Struct 与 Class 有哪些区别?

  2. 按照CLR的默认内存对齐方式计算出下面结构的内存大小

    struct Test(){
       public int a;
       public int b;
       public byte c;
    }
    
    struct Test2{
       public double a;
       public char b
       public int c;
    }
    
    struct Test3{
       public byte a;
       public double b;
       public byte c;
    }
  3. 如何实现值类型的参数引用传递?

  4. 描述一下 ref 与 out 关键字的使用场景

发表于 2019-5-29 23:55:46 | 显示全部楼层   湖南省长沙市
本帖最后由 鱼塘是我的 于 2019-5-29 23:57 编辑

第九天课程作业
9.1 struct 结构的使用 与类的异同 内存分配 与 内存对齐
 一、类 vs 结构
  类和结构有以下几个基本的不同点:
  类是引用类型,结构是值类型。
  结构不支持继承。
  结构不能声明默认的构造函数。
 二、类VS结构详细版随堂笔记
  结构中可以包含:方法、属性、索引器、事件
  索引器不需要赋值也能使用
  编译自动会给我们加上,结构的构造函数,而且自定义了构造函数,空的构造函数仍然有
  结构成员的修饰符可以包含:public private
  由于结构不能继承结构或者类,所以不能使用 protected 修饰符
  结构可以实现接口
  结构由于是值类型,因此在栈上分配内存
 三、内存分配 与 内存对齐
  操作系统的内存分配问题与内存对齐问题对于低层程序设计来说是非常重要的,对内存分配的理解直接影响到代码质量、正确率、效率以及程序员对内存使用情况、溢出、泄露等的判断力。而内存对齐是常常被忽略的问题,理解内存对齐原理及方法则有助于帮助程序员判断访问非法内存。
  C#中的结构体与类的区别
  C# 结构体(Struct)
  C内存分配和内存对齐
  c/c++深入篇之内存分配与内存对齐的探讨
9.2 值传递与引用传递 ref 与 out 关键字
  首先:两者都是按地址传递的,使用后都将改变原来参数的数值。
  其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。
  C#中out和ref之间的区别
  C#中ref和out关键字的应用以及区别


  • 描述一下 Struct 与 Class 有哪些区别

  i.class 引用类型,struct 值类型;
  ii.结构体不支持继承;
  iii.结构体不能声明默认的构造函数;

  • 按照CLR的默认内存对齐方式计算出下面结构的内存大小
    12、16、24
  • 如何实现值类型的参数引用传递?

    ref、out

  • 描述一下 ref 与 out 关键字的使用场景
    ref:在参数传入之前变量必须赋值
    out:参数在函数返回之前必须赋值

Delphi函数的out、var等关键字的作用,和使用场景

评分

参与人数 1好评 +1 精币 +5 收起 理由
老郭 + 1 + 5 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2019-4-29 18:52:53 | 显示全部楼层   江苏省南京市
1、描述一下 Struct 与 Class 有哪些区别?
Struct:结构中可以包含方法、属性、索引器、事件;索引器不需要赋值也能使用;
           编译自动会给我们加上结构的空构造函数,而且额外自定义了构造函数;
           结构的成员修饰符可以包含public、private,但不能用protected(不能继承);
           结构可以实现接口;结构式值类型,在栈上分配内存。

2、按照CLR的默认内存对齐方式计算出下面结构的内存大小
4+4+4=12
8+(4+4)=16 -> 8 +8=16
8+8+8=24

3、如何实现值类型的参数引用传递?
ref 或 out 关键字

4、描述一下 ref 与 out 关键字的使用场景
参数传递引用的两种约定:
ref:在参数传入之前变量必须赋值
out:参数在函数返回之前必须赋值

评分

参与人数 1好评 +1 精币 +2 收起 理由
老郭 + 1 + 2 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2019-4-14 21:00:17 | 显示全部楼层   湖北省荆州市
本帖最后由 cw112 于 2019-4-14 21:03 编辑

描述一下 Struct 与 Class 有哪些区别?
Struct 实际上是以值类型存储,Class是以引用类型存储。(感觉好像是对的,但是不太确定)

按照CLR的默认内存对齐方式计算出下面结构的内存大小
struct Test(){
   public int a;
   public int b;
   public byte c;
}
struct Test2{
   public double a;
   public char b
   public int c;
}
struct Test3{
   public byte a;
   public double b;
   public byte c;
}
4+4+4=12
8+4+4=16
8+8+8=24
如何实现值类型的参数引用传递?
ref,out

描述一下 ref 与 out 关键字的使用场景
值类型参数需要以引用方式传递时。

来给大佬凑凑人qi。

评分

参与人数 1好评 +1 精币 +2 收起 理由
老郭 + 1 + 2 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2019-4-13 11:20:06 | 显示全部楼层   江苏省扬州市

1、描述一下 Struct 与 Class 有哪些区别?
Struct:结构中可以包含方法、属性、索引器、事件;索引器不需要赋值也能使用;
           编译自动会给我们加上结构的空构造函数,而且额外自定义了构造函数;
           结构的成员修饰符可以包含public、private,但不能用protected(不能继承);
           结构可以实现接口;结构式值类型,在栈上分配内存。

2、按照CLR的默认内存对齐方式计算出下面结构的内存大小
4+4+4=12
8+4+4=16
8+8+8=24

3、如何实现值类型的参数引用传递?
ref 或 out 关键字

4、描述一下 ref 与 out 关键字的使用场景
参数传递引用的两种约定:
ref:在参数传入之前变量必须赋值
out:参数在函数返回之前必须赋值

评分

参与人数 1好评 +1 精币 +2 收起 理由
老郭 + 1 + 2 很赞同,谢谢!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表