C# 结构与类的区别
一、定义方式
定义结构:
struct PointStruct //默认的访问权限是 public
{
public int X { get; set; }
public int Y { get; set; } public PointClass(int x, int y)
{
X = x;
Y = y;
}
}
定义类:
class PointClass //默认的访问权限是 private
{
public int X { get; set; }
public int Y { get; set; } public PointClass(int x, int y)
{
}
}
首先,声明所使用的关键字: 使用 struct 声明结构,使用 class 声明类。
其次,默认的访问权限: 结构的默认访问权限是 public,而类的默认访问权限是 private。
然后,声明的变量的初始值: 在类里面声明变量可以给初始值,但在结构体中声明的变量是不可以赋初始值的。
最后,构造函数: 结构体不能显式定义无参数的构造函数,并且结构体中的构造函数中必须给该结构体的所有字段赋值;但是类的构造函数中可以不给字段赋值。
二、存储及赋值
结构是值类型(存储的是数据的值),当其作为局部变量的时候是存储在堆栈空间内的,其对象的字段值是直接存储在这个变量中的。(堆栈的空间有限,但存取速度快,处理效率要比堆的效率高)
类是引用类型(存储的是对实际数据的引用),存储在托管堆中。(托管堆的空间较大,但速度要比堆栈慢)
值类型与引用类型是结构和类的最大
三、选择“结构”还是选择“类”?
结构是值类型,所以结构体就是当成值来使用的;而类是引用类型,所以类是通过引用来对实际数据进行造作的。
因为堆栈的存储速度快(但空间有限),所以,我们在写一个轻量级的对象(只需要少量的字段)的时候,一般选用结构来写。
而当我们在描述一个重量级的对象的时候,一般选用的都是类的实现方式。
C# 结构与类的区别的更多相关文章
- .NET中结构和类的区别
最近在学习Swift语言,看到了枚举这一章,Swift可以支持在枚举中定义方法...于是想到了回顾一下.NET中枚举.结构.类之间区别. 枚举在.NET较为简单,这里就不作比较,只谈谈结构和类. 1. ...
- C#中结构与类的区别
一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...
- C#基础知识 结构与类的区别
网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细.不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆. (前提:对于值类型与引用类型有一定的认识) 结构最重要 ...
- C++中结构和类的区别
首先从从语言角度来看,c语言是一种结构化的语言,便于按照模块化的方式来组织程序,易于程序员的调试和维护,而对于c++来说,我么可以认为它是标准c的超集.实际上所有的c程序也是c++程序.但两者之间还是 ...
- .net(C#)中结构和类的区别
static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...
- C#:浅析结构与类的区别
一. 结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中 类 :引用类型,存储在堆中,位于计算机内存的不同逻辑位置 二. 较小的数据使用结构: 将一 ...
- C# 结构与类
结构是一种可以包含数据成员和方法成员的值类型数据结构.为结构分配数据时不需要从托管堆中分配内存,结构类型的变量直接包含了该结构的数据.结构中可以包含构造函数,常量,字段方法,属性,运算符,事件和嵌套类 ...
- C#中结构体和类的区别
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题:这两种数据类型的本质区别主要是各自指向的 ...
- C#中的结构体与类的区别
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
随机推荐
- BeyondCompare使用一段时间后会因“许可证密钥已被撤销:3281-0350“而无法使用
解决方式: 1.用任意文本编辑软件打开“C:\Users\[Your User Name]\AppData\Roaming\Scooter Software\Beyond Compare 3\BCSt ...
- rpm包与 yum 安装与卸载
rpm包的安装: 1.安装一个包 # rpm -ivh 2.升级一个包 # rpm -Uvh 3.移走一个包 # rpm -e 4.安装参数 --force 即使覆盖属于其它包的文件也强迫安 ...
- [转载]URI、 URL 和 URN 的区别
1. URI URI = Universal Resource Identifier 统一资源标志符 URI采用一种特定语法标识一个资源的字符串.所标识的资源可能是服务器上的一个文件.不过,也可能是一 ...
- 如何在Github创建repository
第一步:登陆Github,点击new repository 第二步:输入相应内容创建 第三步,创建完成,如下.
- 【python】文件处理行与行之间的内容
在处理文本文件时,很多时候需要我们处理跨行的数据,但是用for循环处理不是很方便,想了一个歪招来处理不是很大的数据. 核心思想就是将上一行的东西存在一个列表里,到下一行用完这个数据在循环体里将列表初始 ...
- 阿里云windows 2008 服务器处理挖矿程序 Miner
阿里云盾最近报发现wanacry蠕虫病毒和挖矿进程异常 仔细检查进程后,发现两个奇怪的进程 Eternalblue-2.2.0.exe,winlogins.exe 特别是伪装成 winlogins.e ...
- COMP 321
COMP 321April 24, 2019Questions on this exam may refer to the textbook as well as to the manual page ...
- 论文笔记:ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware
ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware 2019-03-19 16:13:18 Pape ...
- 论文笔记:Fast Online Object Tracking and Segmentation: A Unifying Approach
Fast Online Object Tracking and Segmentation: A Unifying Approach CVPR-2019 2019-03-11 23:45:12 Pape ...
- docker更改默认仓库地址
zq@ubuntu:~$ docker pull -h Flag shorthand -h has been deprecated, please use --help Usage: docker p ...