C#基础知识 结构与类的区别
网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细。不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆。
(前提:对于值类型与引用类型有一定的认识)
结构最重要的两点:
- struct 值类型
- struct 不能被继承(所以不能被protected)
以前总会纠结一个问题,什么时候用Class,什么时候用Struct。(不知道大家有没有同样的困惑)
值类型:就代表它存储的位置是stack(堆)上,存储在stack上就代表,它传递的不是值所在内存中的指针,代表它传递的是副本,这些最终说明了一个问题,就是在changeValue这个方法里修改它的值之后,在main方法中并没有任何影响。
static void Main(string[] args)
{
PersonClass personClass = new PersonClass();
personClass.Name = "Class";
PersonStruct personStruct = new PersonStruct();
personStruct.Name = "Struct";
changeValue(personClass, personStruct);
Console.WriteLine(personClass.Name);
Console.WriteLine(personStruct.Name);
}
public static object changeValue(PersonClass personClass, PersonStruct personStruct)
{
personClass.Name = "Class1";
personStruct.Name = "Struct1";
return null;
}
结果:
不能被继承:这个很好理解,它不能继随别人,别人也不能继承它。当然它是可以实现接口的。
结构与类之间相同处很多很多。我们无需记住相同点,只需要记住不同点(类型与继承),自然就知道在什么样的场景可以使用结构。
Tip:msdn给出的建议,以下几种情况适合使用struct
- 小于16个字节
- 偏向于值,是简单数据,而不是偏向于"面向对象"
- 希望值不可变
如果大家有什么好的想法,可以留言,我肯定会学习并实践好再拿出来分享。
非常感谢。
如果对您有帮助,请点赞!
C#基础知识 结构与类的区别的更多相关文章
- .NET中结构和类的区别
最近在学习Swift语言,看到了枚举这一章,Swift可以支持在枚举中定义方法...于是想到了回顾一下.NET中枚举.结构.类之间区别. 枚举在.NET较为简单,这里就不作比较,只谈谈结构和类. 1. ...
- C#中结构与类的区别
一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...
- JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...
- C++中结构和类的区别
首先从从语言角度来看,c语言是一种结构化的语言,便于按照模块化的方式来组织程序,易于程序员的调试和维护,而对于c++来说,我么可以认为它是标准c的超集.实际上所有的c程序也是c++程序.但两者之间还是 ...
- C++ | C++ 基础知识 | 结构、联合与枚举
1. 结构 1.0 结构 数组是相同类型元素的集合,相反,struct 是任意类型元素的集合. 代码例子: struct Address { const char* name; int number; ...
- .net(C#)中结构和类的区别
static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...
- C# 结构与类的区别
一.定义方式 定义结构: struct PointStruct //默认的访问权限是 public { public int X { get; set; } public int Y { get; s ...
- C#基础之结构和类
大家在平时的工作中对类的使用应该是比较多的,但是在结构使用方面可能稍微少点,这里我就总结一下结构和类的一些异同之处,如有错误之处,还请指正. 结构是值类型,类是引用类型,结构通常用来封装小型相关变量组 ...
- JAVA核心技术I---JAVA基础知识(时间类)
一:时间类库了解 java.util.Date(基本废弃,Deprecated) –getTime(),返回自1970..1以来的毫秒数 java.sql.Date(和数据库对应的时间类) //与数据 ...
随机推荐
- Datatable转换为Json
/// <summary> /// Datatable转换为Json /// </summary> /// <param name="table"&g ...
- SUID,SGID,SBIT这些到底是什么
SUID,SGID,SBIT这些都是文件的特殊权限. SUID(Set UID)文件执行过程中,用户拥有文件的root权限. SGID(Set GID)文件执行过程中,执行者拥有该文件的用户组的权限. ...
- 使用cobbler批量安装操作系统(基于Centos7.x )
1.1 cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使 ...
- 文本域、bootstrap-table显示以及MySQL三者间的换行符问题
首先,今天在做项目的时候遇到的一个问题,如何实现文本输入换行以及在前台Bootstrap-table中显示也能够换行. 也许你马上就会想到说,用富文本编辑器,然而我们需要实现的只是文本输入以及换行功能 ...
- java之JVM学习--基本机构
JDK,JRE,JVM关系图 JVM物理结构: jvm内存区详解: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字 ...
- 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang
网盘系统2.0 上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...
- js从时间戳中获取日期
1,从时间戳中解析出年月日时分秒: time为时间戳: var timestr = new Date(parseInt(time) * 1000); var year = timestr.getFul ...
- Ajax跨域 CROS处理
Ajax跨域方法有多种 这里介绍CROS跨域的实际案例 场景:A域名 请求 B域名: 暂且 A为客户端 B为服务端: 请求的服务端必须自己能控制 或者服务器端头部已经添加 Access-Control ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记01
day1课程目录: 开课介绍(1) 开课介绍(2) 开课介绍(3) 电脑简史(1) 电脑简史(2) 计算机结构 day1课程内容梳理: 导师介绍: Alex Li(金角大王):买了一辆特斯拉,喜欢姑娘 ...
- svg-写一个简单的进度条
html <div class="container"> <div class="line-wrap"> <svg version ...