博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSharpThinking---C# 要点(附加三)
阅读量:5134 次
发布时间:2019-06-13

本文共 882 字,大约阅读时间需要 2 分钟。

Part 1

一.值类型和引用类型的误区:

1.结构是轻量级的类。

错误,大多数时候结构交类中少了很多方法,略显轻便,但DateTime是返例,DateTime携带了计算方法。类中所带的方法是引用类型,并不会大量消耗内存。

2.引用类型在堆上,值类型在栈上。

错误,变量的值是在它声明的位置存储的,引用类型始终在堆上,值类型则可能在堆上也可能在栈上,具体取决于上下文。假定,一个类中有一个int类型的实例变量,在堆上(那么在这个类中的任何对象,总是在堆上)。

3.对象在C#中默认是通过引用传递的。

错误,涉及到一个引用类型时,可以以“引用”方式传递,也可用“传值”方式传递。引用类型作为方法参数时,参数默认是以“值传递”的方式来传递的,但值本身是一个引用。

 

二.装箱和拆箱

1.拆箱与装箱是Copy副本,改变原始值并不改变拆/装箱后的值。

2.如果一个类型的值调用ToString、Equals、GetHashCode时,没有覆盖这些方法,将会发生装箱(基类方法为Object)。将值作为接口传递时也是如此。

 

三.与委托有关

   C#1:实例方法,签名必须相同。

   C#2:方法组转换订阅事件。

   C#3:Lambda表达式、隐式转换+匿名委托、扩展方法。

   C#4:委托中支持泛型的协变和逆变,动态类型。

 

 

Part 2

一.泛型

1.为什么需要泛型:无需每次强制转换C#1,减少拆箱与装箱操作(提升性能),IDE中集成检查(编译时检查,而不是在运行时)。

2.List<T> 读作:List Of T ,仿VB。命名上Tkey ,TValue更有意义。

3.泛型方法和泛型类型。

4.类型约束:引用类型约束,值类型约束,构造函数类型约束,转换类型约束,组合约束。

5.遇到泛型类型时,编译器会在编译未绑定的泛型类型时就解析好所有方法重载,而不是等到执行时。

6.泛型迭代:IEnumerator<T>

7.反射:typeof()

 

 

 

转载于:https://www.cnblogs.com/cuiyansong/archive/2013/05/07/3054049.html

你可能感兴趣的文章
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
Wpf 之Canvas介绍
查看>>
linux history
查看>>
jQuery on(),live(),trigger()
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
【架构】Linux的架构(architecture)
查看>>
ASM 图解
查看>>
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>