C#基础--struct(结构体)
结构体和类有点类似 我们定义一个类的时候 是class 类名 定义结构体的时候是 struct 结构体名
结构体的写法
struct Point
{
// public int x=10; 这种写法错误
public int x ;
public int y;
public int X { get { return x; } set { x = value; } }
public void SayHi()
{
Console.WriteLine("哈哈哈哈哈");
}
public Point(int x, int y)
{
this.y = y;
this.X = x; //不能为属性赋值 直接为字段赋值即可
}
}
结构体(struct) 和类(class)做比较
1. 结构体和类非常的相似. 结构体也是用来表示1类具有相同特征和行为的事物的.
2. 定义结构体的位置和类一样,在命名空间下.
定义结构体的语法:
struct 结构名称
{
}
3. 结构体中可以定义字段.
结构体中也可以定义方法.
结构体中也可以定义属性
结构体中也可以定义构造函数
结构体只有创建对象,才可以使用对象中的成员.
4. 结构体与类到底有没有区别?
1). 语法上的区别
a. 定义结构体使用struct 定义类使用class
b. 虽然结构体可以声明字段,但是在声明字段的时候不允许给字段初始值.
c. 无参数的构造函数在结构体中总是自动存在的,所以我们不能写1个无参数的构造函数.
d. 在结构体的构造函数中,要求为结构体对象的每1个字段赋值.
e. 在构造函数中为属性赋值,并不认为是在为字段赋值. 要求在构造函数中直接为字段赋值.
f. 创建结构体对象 可以使用new关键字来创建,也可以不使用new关键字来创建.
两种方式创建对象的区别.
如果时候用new创建. 那么这个结构体对象的所有的字段就有值了. 因为new调用了构造函数,而结构体的构造函数要求为所有的字段赋值.
就算我们调用无参数的构造函数创建对象,这个结构体对象的字段也是有值的,.所以我们不难猜出. 无参数的构造函数中为所有的字段赋默认值
如果不使用new创建. 因为没有调用构造函数, 所以这个结构体对象的字段是没有值的.
所以在使用结构体对象的字段之前 必须要为字段赋值.
2). 结构体如何在内存中存储的?
a. 在声明结构体变量的时候就已经在这个变量中创建好了结构体对象.
new关键字在这里只是调用了构造函数
b. 结构体对象并不存储在堆空间中,而是存储在栈空间的变量之中.
所以结构体与类最大的区别. 结构体对象存储在栈空间中,类的对象存储在堆空间之中.
c. 结构体是值类型的. 因为结构体的对象直接存储在结构体变量中.
5. 为什么不运行为字段给初始值?
因为就算我们为字段赋值,实际上编译器是将赋值的代码放到构造函数中去的,
而我们创建结构体对象完全可以不调用构造函数
6. 结构体变量在相互赋值的时候. 是将源对象中的字段的值逐个的拷贝个目标对象的字段.
7. 什么时候使用结构体?
a. 结构体对象的最大的特点 存储 在栈空间.
b. 内存中栈空间比较小. 堆空间相对较大.
栈空间中的数据访问速度相对较快.
堆空间中的数据访问速度相对较慢.
c. 结构体是存储在栈空间中的.所以如果我们把对象以结构体的方式存储在栈中 那么访问速度就会快.
但是如果结构体中有很多成员. 那么定义成结构体的话 就会在栈中占很多空间 反而会影响效率.
d. 当我们要表示1个轻量级对象(就是成员很少,特别是字段很少)的时候. 就可以定义为结构体 让其存储在栈中 提高效率.
当我们要表示1个重量级对象.就表示为类,让对象存储在堆中
C#基础--struct(结构体)的更多相关文章
- 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组
一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
- C# Struct结构体里数组长度的指定
typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...
- Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数
知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...
- C#语言struct结构体适用场景和注意事项
在C#语言中struct结构体和class之间的区别主要是值类型和引用类型的区别,但实际上如果使用不当是非常要命的.从Win32时代过来的人对于struct一点不感觉陌生,但是却反而忽略了一些基本问题 ...
- C语言 Struct 结构体在 Java 中的体现
大一整个学期完成了 C 语言的学习,大二就进入了Java 的学习. 和C语言一样,我们都会尝试写一个小小的学生管理系统什么的,学习过 C 语言同学知道,在管理系统中 Struct 结构体是个很好用的东 ...
- Swift Struct 结构体
前言 Swift 语言有两种基本的数据类型,即类(class)和结构体(struct),class 这样的概念大家不会陌生,而 struct 也并不是什么新的概念,在 Objective-C 和 C ...
- go struct结构体
struct结构体 用来自定义复杂数据结构 struct里面可以包含多个字段(属性),字段可以是任意类型 struct类型可以定义方法,注意和函数的区分 struct类型是值类型 struct类型可以 ...
随机推荐
- 第二百零三天 how can I 坚持
空虚的有点害怕. 日复一日. 今天做了什么?下班看了个搞笑段子. 上班和刘松聊了一下午,东扯西扯的. 下班玩了两局dota. 想租车去出去玩玩,确实没有什么想去的地方了. 莫巧菲. 哎,未来好可怕啊. ...
- ICON的设计很重要
ICON的设计很重要 发布者: wuye | 发布时间: 2014-12-19 17:45| 评论数: 0 游戏类型:手游游戏/平板游戏 设计类型:[功能/模块/UI] 作者:小金狮的UI分享 每个 ...
- 创建并使用Windows Azure虚拟机模板
在现实的IaaS应用中,往往会创建自己的虚拟机映像模板,以满足快速应用部署的目标,如预先配置好某些应用.管理与监控管理等. 1.登录到Windows Azure Dashboard中创建一个做为模板的 ...
- 为何j2ee变成了javaee?
Sun的版本命名有点乱,Java刚面世时还貌不惊人,直到1.2出现后进步很大,Sun就叫它Java 2了,这个称谓持续到1.4,因此Java的三个平台对应的是J2ME(Java 2 Mobile Ed ...
- AcceptEx编辑
Windows套接字AcceptEx函数接受一个新的连接,返回本地和远程地址,并接收由客户端应用程序发送的第一块数据.Windows 95/98不支持AcceptEx函数. 平台SDK:Windows ...
- Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)
简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能.非阻塞算法属于并发算法,它们可以安全地派生它们的线程, ...
- JavaScript谁动了你的代码
到目前为止,同学你知道了JavaScript的历史,也了解其"你想是啥就是啥"的变量系统.相信凭借你深厚的Java或者C++功底,再加上程序员特有的自傲气质,你肯定会信心满满:自信 ...
- 使用jQuery-AJAX–读取获得跨域JSONP数据的示例
在项目开发中,如果在同一个域名下就不存在跨域情况,使用$.getJSON()即可实现.但是需要跨域请求其他域名下面的Json数据就需要JSONP的方式去请求,跨域写法和getJSON有差异.如下: ...
- 【M18】分期摊还预期的计算成本
1.基本思想就是:如果将来肯定要做某件事,并且这件事情耗时,提前把东西准备好,先做一部分.常用的使用场景有: 2.考虑一个大的数据集合,集合中元素不断变化.经常要取出里面的最大值,正常的做法是:每次调 ...
- C# 6与VB 12即将加入模式匹配
又有一种源自于函数式编程语言中的概念加入了C#和VB的阵营,这就是被称为模式匹配(Pattern Matching)的特性.初看上去,模式匹配的作用类似于一段switch/select语句块,但它的功 ...