C#吾日三省吾身
全局变量与局部变量区别:
全局变量声明完毕后,就算不手动初始化赋值,也是有默认值的;
但是局部变量声明完毕后,如果不给它手动赋值,是无法直接使用这个变量的.
尽量避免少的装箱拆箱:
string a = "a" + ;
string b = "a" + .ToString(); //高效
//ToString()是直接通过操作内存来完成int到string的转换,效率比装箱高很多
ArrayList和List<T>,尽量使用List而不用ArrayList,ArrayList会进行拆箱装箱操作,存值会转换成Object存储(装箱),取值再转换成对应类型(拆箱);List<T>就不会
字符串大量操作使用StringBuilder
区别const 和 readonly的使用方法
const效率高,编译期常量,天然就是static,不能再前面增加static关键字修饰.经过编译器编译之后.在代码中引用const的地方会用const变量所对应的实际值来代替.只能修饰基元类型,枚举类型或字符串类型
readonly效率可以,运行时常量,第一次被赋值后将不可改变,修饰没有限制readonly属于类实例的成员,要使他成为类的成员,需要在前面加上static,这样就可以直接使用类名调用.(构造函数,变量初始化都可以赋值)
重载运算符
class Test
{
public int par;
public static Test operator +(Test a,Test b)
{
a.par += b.par;
return a;
}
}
== 和 Equals
Equals用于引用类型的相等性比较,==用于值类型的相等性比较
如果用来比较的两个变量所包含的数值相等,那么将其定义为“值相等”;
如果比较的两个变量引用的是同一内存,那么将其定义为“引用相等”。
dynamic与var (dynamic没搞懂)
dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译器默认dynamic对象支持你想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错:
Console.WriteLine(dynamicObject.Name);
Console.WriteLine(dynamicObject.SampleMethod());
实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。var实际上是编译期抛给我们的“语法糖”,一旦被编译,编译期会自动匹配var 变量的实际类型,并用实际类型来替换该变量的申明,这看上去就好像我们在编码的时候是用实际类型进行申明的。而dynamic被编译后,实际是一个object类型,只不过编译器会对dynamic类型进行特殊处理,让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期。
foreach不支持循环时增删操作
如果在foreach中增/删某一元素,则会抛出异常。
原因:foreach循环使用了迭代器进行集合的遍历,它在FCL提供的迭代器内部维护了一个对集合版本的控制。
集合版本:简单来说就是一个整型变量,任何对集合的增删操作都会使版本号+1。
foreach循环会调用MoveNext方法来便利元素,MoveNext方法内部会进行版本号的检测,一旦版本号变动,就会抛异常。
必要时将不再使用的对象引用赋值为null
delegate与event
public delegate void ActionCall(); public event ActionCall call; //委托可以赋值(=)和绑定(+= -=),事件只能绑定(+= -=) //事件在本类可以调用,其他类中不能调用;
拓展方法:不改变原类,给类添加方法
public class Test
{
public void Action()
{
}
}
//扩展方法必须在静态类中,扩展方法必须是静态的
public static class TestExtension
{
public static void ActionExtension(this Test t) //第一个参数必须是要扩展的类型,且必须加上了this关键字
{
}
public static void ActionExtension1(this Test t, int a)
{
}
}
//这个时候就可以调用拓展方法了
Test t = new Test();
t.ActionExtension();
t.ActionExtension1(0);
注意:不支持扩展事件和属性,但是可以扩展接口
避免双向耦合
双向耦合指两个类型之间互相引用.一般来说,类型之间不应该存在双向耦合,如果出现,则考虑重构。
C#吾日三省吾身的更多相关文章
- Brainstorm in one sentence
[1]佚名|台湾学生占领立法院 人會長大三次 第一次是發現世界不是為自己而轉的時候. 第二次是在發現即使再怎麼努力,終究還是有些事令人無能為力的時候. 第三次是在,明知道有些事可能會無能為力,但還是會 ...
- 用java写bp神经网络(三)
孔子曰,吾日三省吾身.我们如果跟程序打交道,除了一日三省吾身外,还要三日一省吾代码.看代码是否可以更简洁,更易懂,更容易扩展,更通用,算法是否可以再优化,结构是否可以再往上抽象.代码在不断的重构过程中 ...
- [week1]每周总结与工作计划
实在不想说这句俗话,因为实在太俗了.但是俗话说,“吾日三省吾身”,我虽然难以做到每天反省那么多次,但是每周来一次就很不错了.于是我决定: 从这周开始准备每周都写每周总结与工作计划. 很好,就这样说定了 ...
- [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET
Women Techmaker 北京站 [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素 发表于2 ...
- TDD(测试驱动开发)学习二:创建第一个TDD程序
本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化
阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...
- html之css选择器学习
相关内容: 什么是css选择器 标签选择器 类选择器 id选择器 并集选择器(分组选择器) 交集选择器 后代选择器 子标签选择器 属性选择器 相邻兄弟选择器 伪类选择器 伪元素选择器(伪对象选择器) ...
- 做生活的有心人——xxx系统第一阶段总结
2017秋,桃子已经步入大学三年级了,觉得格外幸运 因为现在,有了学习的动力. 如果你和我一样也是在大学中后部分才意识到,自己是个大人了,思维模式开始转变开始融入一些前所未有的认知,觉得自己渺小得如沧 ...
- 20162322 朱娅霖 作业005&006 栈,队列
20162322 2017-2018-1 <程序设计与数据结构>第五.六周学习总结 教材学习内容总结 集合的介绍(总述) 集合是收集并组织其他对象的对象.主要分为线性集合(集合中的元素排成 ...
随机推荐
- java 发布订阅
https://www.cnblogs.com/coderdxj/p/9627310.html java 观察这模式(发布订阅模式) 观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象 ...
- 我遇到的Echarts 最大值不显示&平均值不正常
用Echarts做图表的时候,遇到最大值不显示和平均值不正常的问题,如图: 找了半天,原来是X轴6个坐标有7个数据,只是最后那个数据没有显示出来,而且还是最大的,无语. 加上第七个坐标之后,就显示正常 ...
- 特征工程中的IV和WOE详解
1.IV的用途 IV的全称是Information Value,中文意思是信息价值,或者信息量. 我们在用逻辑回归.决策树等模型方法构建分类模型时,经常需要对自变量进行筛选.比如我们有200个候选自变 ...
- [Spring Boot] Aspect Intro
Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another ...
- 使用CSS3 will-change提高页面滚动、动画等渲染性能----------------------------引用
Chris Ruppel当其使用background-attachment: fixed实现背景图片不随滚动条滚动而滚动效果的时候, 大家肯定会好奇,这到底施了什么魔法,可以让渲染提升如此之显著.3个 ...
- Babel 转译 class 过程窥探--------引用
// Shape 类function Shape(id, x, y) { this.id = id; this.setLocation(x, y);}// 设置坐标的原型方法Shape.p ...
- 【Python网络】网络协议篇
OSI七层协议 互联网协议按照功能不同分为OSI七层 或 TCP/IP五层 或 TCP/IP四层 每层运行常见物理设备 TCP/IP五层模型讲解 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬 ...
- [Mysql]过大sql文件导入过慢问题解决
控制 MySQL 磁盘写入策略 以及 数据安全性 的两个关键参数: innodb_flush_log_at_trx_commit 和 sync_binlog 参数:innodb_flush_log_a ...
- vue模板语法上集
模板语法上集 1.1 插值 1.1.1 文本 {{msg}} 1.1.2 html 使用v-html指令用于输出html代码 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表 ...
- 图片文件打开失败:“Could not load image... ...0x89 0x50”
造冰箱的熊猫@cnblogs 2018/12/10 使用Image Viewer打开图片文件时,提示错误“Could not load image '001.jpg'. Error interpret ...