由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆。为更好理解,特做以下区分记录:

  ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct。

  ② 结构体中不可对声明字段进行初始化,但类可以。

  ③ 如果没有为类显式地定义构造函数,c#编译器会自动生成一个无参数的实例构造函数,称之为隐式构造函数;

   与此不同的是,在结构体中,无论你是否显式地定义了构造函数,隐式构造函数都是一直存在的。

  ④ 结构体中不能显式地定义无参数的构造函数,这也说明无参构造函数是一直存在的,所以不能在显式地为结

    构体添加一个无参的构造函数;而类中则可以显式地定义一个无参数的构造函数。

  ⑤ 在结构体的构造函数中,必须要为结构体中的所有字段赋值。

  ⑥ 创建结构体对象可以不适应new关键字,但此时结构体对象中的字段是没有初始化值的,而类必须适应new

    关键词来创建对象。

  ⑦ 结构体不能继承结构或者类,但可以实现接口;而类可以继承类但不能继承结构,它也可以实现接口。

  ⑧ 类是引用类型,而结构体是值类型。

  ⑨ 结构体不能定义析构函数,而类可以有析构函数。

  ⑩ 不能用abstract和sealed关键字修饰结构体,而类可以。

【c# 学习笔记】类与结构体的区别的更多相关文章

  1. Swift 学习笔记 (类和结构体)

    类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...

  2. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  3. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  4. C++类和结构体的区别

    C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;

  5. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  6. Swift语法学习之 类和结构体

    类和结构体 本页包括内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自 ...

  7. swift 学习- 10 -- 类和结构体

    // '类和结构体' 是人们构建代码所使用的一种通用且灵活的构造体, 我们可以使用完全相同的语法规则来为 '类和结构体' 定义属性 (变量 和 常量) 和添加方法, 从而扩展 类和结构体 的功能 // ...

  8. Swift - 类和结构体的区别

    类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...

  9. C#学习笔记_12_枚举&结构体

    12_枚举&结构体 枚举 是一种数据类型 适用于某些取值范围有限的数据 语法: [访问权限修饰符] enum 枚举名 { 枚举值 } 枚举名遵循大驼峰命名法 枚举一般情况下是和switch c ...

随机推荐

  1. hibernate meger

    转: 在Hibernate中,有save.persist.savaOrUpdate.merge等方法有插入数据的功能.前三者理解起来较后者容易一些,merge方法从api中的介绍就看以看出它是最复杂的 ...

  2. Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing

    链接: https://codeforces.com/contest/1251/problem/D 题意: You are the head of a large enterprise. n peop ...

  3. javascript/Jquery 将字符串转换成变量名

    var a = ['a', 'b', 'c'] var obj = {} for(i = 0; i < a.length; i++){ obj[a[i]] = "abc" + ...

  4. [Luogu] 受欢迎的牛

    https://www.luogu.org/problemnew/show/P2341 Tarjan 缩点 + 判断出度 #include <iostream> #include < ...

  5. Peaks 线段树合并

    Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...

  6. Arrays.binarySearch采坑记录及用法

    今天在生产环境联调的时候,发现一个很奇怪的问题,明明测试数据正确,结果却是结果不通过,经过debug查询到原来是Arrays.binarySearch用法错误,记录一下,避免后续再次犯错 具体测试如下 ...

  7. SparkConf和SparkContext

    任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数. 初始化后,就可以使用Spa ...

  8. PYNQ系列学习(二)——pynq与zynq对比(一)

    Zynq可扩展处理平台是赛灵思新一代 FPGA的可编程技术的产品系列.与采用嵌入式处理器的FPGA不同,Zynq产品系列的处理系统不仅能在开机时启动,而且还可根据需要配置可编程逻辑.采用这种方法,软件 ...

  9. NTC热敏电阻基础以及应用和选择(转)

    源:NTC热敏电阻基础以及应用和选择 NTC被称为负温度系数热敏电阻,是由Mn-Co-Ni的氧化物充分混合后烧结而成的陶瓷材料制备而来,它在实现小型化的同时,还具有电阻值-温度特性波动小.对各种温度变 ...

  10. php接口数据安全解决方案(一)

    前言 目录介绍 登录鉴权图 接口请求安全性校验整体流程图 代码展示 演示用户登录 演示获取用户信息 文章完整代码地址 后记 前言 目的: 1.实现前后端代码分离,分布式部署 2.利用token替代se ...