学习大神博客链接: http://www.cnblogs.com/zhili/category/421637.html

一 值类型与引用类型

需要注意的string 是特殊类型的引用类型.

使用方法: == 比较的是栈里面的值, 值类型比较值, 对象(除字符串)比较的是栈里面的地址.

equal比较的是实际的值,是object里面的虚方法重写,重写时最好重写getHashCode()方法.

如下为代码例子

static void Main(string[] args)
{
object m1 =1 ;
object m2 = 1;
Console.WriteLine(m1==m2); // False;因为比较的是引用,肯定不是同一个对象.
Console.WriteLine(m1.Equals(m2)); //True. 因为比较的是对象对应的值.
Console.Read();
}
例子2:
static void Main(string[] args)
{
string str1 = "ZhangSan";
string str2 = "ZhangSan";
string str3 = new string(new char[] { 'z', 'h' });
string str4 = new string(new char[] { 'z', 'h'});
Console.WriteLine("str1 == str2 " + (str1 == str2).ToString()); //True
Console.WriteLine("str1 Equals str2 " + str1.Equals(str2));//True Console.WriteLine("str3 == str4 " + (str3 == str4).ToString());//True
Console.WriteLine("str3 Equals str4 " + str3.Equals(str4)); //True. Console.Read();
} //总结: 因为string重写了==方法.用于比较值.


二 Typeof 和 GetType() 区别

  1. typeof  是运算符,而 GetType() 是方法

  2. typeof 获得类型的System.Type对象,GetType()获得当前实例的Type,
  3. GetType()是基类System.Object的方法,只有建立了一个实例之后才能够被调用
  4. typeof的参数只能是int, string, class,自定义类型,不能为具体实例,否则编译器会报错
static void Main(string[] args)
{
object m1 = 1;
object m2 = 1;
// ValueType是引用类型,因为它是类,所以返回为false
Console.WriteLine(typeof(ValueType).IsValueType); //False. ValueType是类!!!
Console.WriteLine(m1.GetType().IsValueType);//Ture
Console.Read();
}

三 静态与非静态.

说的比较透彻的是, 链接: ([C#基础知识系列]全面解析C#中静态与非静态)http://www.cnblogs.com/zhili/archive/2013/06/16/StaticAndNonStatic.html

个人使用总结:   想不实力化类-->创建静态类-->静态属性-->静态成员是private的-->使用静态方法一般用于作为通用的工具类来实现.

文中总结有: 1, 静态方法不能被标识为virtual、abstract或override,静态方法可以被派生访问,但是不能被派生类重写.

2, 构造函数执行过程:

静态成员分配内存空间-->静态成员初始化-->执行静态构造函数-->执行实例成员初始化-->执行实例构造函数

IL 中.ctor代表实例构造器.

四 参数传递

对于按值传递,不管是值类型还是引用类型的按值传递,都是传递实参的一个拷贝.

只是值类型时,此时传递的是实参实例的一个拷贝(也就是值类型值的一个拷贝)

而引用类型时,此时传递的实参引用的副本。

对于按引用传递,传递的都是参数地址,也就是实例的指针.(加ref and out 关键字)

注意: string 是特殊的引用类型. 传递是实际的值,想要方法传递引用, 即外面的值发生改变, 需要加ref out 参数.

最新文章

  1. 《大型网站系统与Java中间件实践》读书笔记——CAP理论
  2. Android 笔记 day3
  3. 如何快速在当前目录打开cmd命令提示符
  4. 如果正确读取SQL Server中的扩展事件?
  5. TechEd2013 Shanghai Hol Session PPT Share
  6. eclipse如何导入项目
  7. PHPNG (next generation)
  8. php网页显示正方形图片缩略图
  9. XSS高级实战教程
  10. Java Numeric Formatting--reference
  11. nginx自动切割访问日志
  12. Sample Page
  13. jwt token Example - Python
  14. 微信小程序开发心得--动画机制
  15. 软件工程(GZSD2015)第二次作业进度
  16. Vue项目的打包
  17. bootstrap顶部导航遮挡下面内容的解决办法
  18. 断路器Ribbon
  19. Java编程的逻辑 (92) - 函数式数据处理 (上)
  20. Ubuntu 14.04 安装 Blender,并放桌面

热门文章

  1. LFI漏洞利用总结(转载)
  2. Python写的东西在CMD下打印中文
  3. Python 类型的分类
  4. C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
  5. Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).
  6. Asp.Net下载页面,并弹出下载提示框
  7. 解决ajax回调函数无返回值得问题
  8. css笔记04:属性选择器
  9. learning nodejs 2 - connect middleware
  10. python(1) - 第一个程序 Hello World!