C# 高级编程个人笔记搬运 二 (类和对象、结构)

本文介绍了C#中结构与类的区别,强调了结构在性能上的优势和使用场景。类与结构的主要区别在于存储位置、是否支持继承等方面。文章详细讲解了类的静态成员、构造函数、属性、方法等,并探讨了构造函数初始化器、静态构造函数、只读字段和不可变类型的概念。此外,还讨论了结构的特性和作为参数传递的行为,以及介绍了匿名类型和可空类型的应用。
摘要由CSDN通过智能技术生成

我欲乘风破浪,踏遍黄沙海洋,
与其误会一场,也要不负勇往,
我愿你是个谎,从未出现南墙,
笑是神的伪装,笑是强忍的伤,
就让我走向你,走向你的窗,
就让我看见你,看见你的伤,
我想你就站在,站在大漠边疆,
我想你就站在,站在七月上。我高考时要有这首歌,我就不会就当码农了,应该去研究导弹去了  T_T。

来来来,接着搬运笔记,写到哪是哪,我很忙的,忙着发呆。前期的内容比较基础,都是基本功,但是也要搬运,磨刀不误砍材工嘛。其实主要是这笔记要从前到后写,别看这标题起的很基础,但是内容融贯深究起来还是有点话题的,太底层的等我看完我的新书吧,我尽力防止烂尾。

结构与类大致区别:

有一门课叫做《数据结构》,当然和这说的结构不是单纯的一回事,只突然想到就提一下。俗话说你学会了数据结构,你就可以封神。数据结构和算法是很紧密的关系,算法也是我最喜欢的课程了,探索最优的思路去解题,成就感爆棚。我要找个时间研究下数据结构的内容和一些算法题,还有我常提的“计算机操作系统”,O(∩_∩)O哈哈~

回归正题,我很少见到项目中有好好用结构的,有些宁到处组建一家子常量也不肯写一个结构,气死人了。但是不代表结构就不重要。

结构不同于类,因为它们不需要在堆上分配空间(类是引用类型,总是存储在堆上),而结构是值类型,通常存储在栈上,另外,结构不支持继承。凡是想着继承一个结构的都是脑子有泡的。

①、较小的数据类型使用结构可提高性能。虽然双方在语法上很相似,主要区别是使用关键字struct代替class来声明结构

②、类和结构都要new来声明实例:这个关键字创建对象并对其进行初始化。

③、类和结构最重要的一个区别是,类类型的对象通过引用传递引用传递其实是它指向它所存在的内存地址,当你去修改的时候他操作的是源数据,结构类型的对象按值传递(按值传递,其实是复制行为,将数据值复制一份过来,当你改变参数值时,你是动不到源数据的,你只是修改了它的替身,但是你此刻用的就是它的替身)。

 

类篇:

类包含静态成员和实例成员,静态成员属于类,实例成员对象。静态字段的值对每个对象都是相同的,而每个对象的实例字段都可以有不同的值。(细节看另一篇,我写了)。提一下,很多人为了方便经常把字段声明为public,这样是不合适的,该类的东西就应该该类才能去用,不能大门一开,谁都抢。所以我们要定义字段为private。

区分一下属性和字段,以前我也分不清。首先我们经常写的private string eyeColor;这个就是字段。而属性呢,就是用类似java的方式给它套上get、set的衣服。如:public string eyeColor{get;set;}这种就是属性(这种写法也叫作自动实现的属性,把它展的特别齐全就一般属性)。看到我这里写的是public而不是private,因为我们这个eyeColor它可以通过get、set的方式去控制访问,比如:public string eyeColor{get;private set;},所以我们用才会不介意公开它(public)。

所以字段和属性的区别最大就在于属性更容易被灵活控制,因为读取分开可以做不同的访问设定。在你需要针对某些数据做一些配置的时候,最好用属性。而字段平常用的最多,几乎前面一个限定符就可以昭告天下你能不能用,该不该用。

那属性会不会比字段更耗性能?不会,别管他看起来多么七拐八弯,他的最终性能都是由编译成IL码决定的,JIT在编译成本地代码的时候,根本不会为属性多做多余的编译,它会自己去内联代码。

方法的实现如果只有一个语句,我们可以用lambda语法糖。比如:

public bool IsSquare(Rectangle rect)=> rect.Height == rect.width;

说到方法的使用,我们不谈重写(一模一样)和重载(参数不一样)的区别,我们着重谈一下一些容易被忘记的又高效的使用方法。

①、任何方法都可以使用命名的参数调用。只需要编写方法的参数名,后面跟一个冒号和所传递的值。如:

r.Area(height : 10, width: 10);   // 这最大的好处就是让别人很明白你的意图是什么。

②、参数也是可选的,必须为可选参数提供默认值。写法如下:

// 切记可选参数一定要是最后的参数,
r.Area(double height, double width, string colour="red"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值