学习大神博客链接: 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 参数.

值类型与引用类型(特殊的string) Typeof和GetType() 静态和非静态使用 参数传递 相关知识的更多相关文章

  1. string 是值类型,还是引用类型(.net)[转]

    转自http://hi.baidu.com/newfzks/item/b805f0f4edb0810dd89e7290 string 是值类型,还是引用类型(.net) 一. string 类型的用法 ...

  2. C#入门篇6-7:字符串操作 看看字符串的特殊之处 值类型与引用类型的区别

    //看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region ...

  3. C#基础(四)--值类型和引用类型,栈和堆的含义

    本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型: 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Obje ...

  4. String为值类型还是引用类型

    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助. 如果有错误请指出. 来看下面例子: //值类型 int a ...

  5. C#中string类型是值类型还是引用类型?

    .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串. string类型(引用类型) 名称 CT ...

  6. C#中string类型是值类型还是引用类型?(转)

    出处:https://www.cnblogs.com/dxxzst/p/8488567.html .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一 ...

  7. 转:C# String为值类型还是引用类型

    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助,如果有错误请指出. 来看下面例子: //值类型 int a ...

  8. 枚举|标志枚举+|(或)和&(与)运算|类型转换|值类型和引用类型|传参|异常|垃圾回收

    枚举部分 enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它. 但是,还可以 ...

  9. JavaScript中值类型与引用类型

    JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...

随机推荐

  1. 【M3】绝对不要以多态方式处理数组

    1.考虑下面的情况,有个方法,如下: void Print(ostream& s, const Base array[], int size) { for(int i=0; i< siz ...

  2. Android学习笔记之百度地图

    步行路线搜索及RouteOverlay 方式与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null, start, null, end)修改为mMKSearch.walki ...

  3. [ES6] 17. Set

    Es6 provides "Set", it likes array but the data inside should be unqiue. "Set" i ...

  4. 利用text插件和css插件优化web应用

    JavaScript的模块化开发到如今,已经相当成熟了,当然,一个应用包含的不仅仅有js,还有html模板和css文件. 那么,如何将html和css也一起打包,来减少没必要的HTTP请求数呢? 本文 ...

  5. yii2 rbac 设计

    tbl_auth_item 根据type存储认证项目...role.task.operation 游客... 不能操作任何模块 普通用户 ..biz_rule..需要登录 只有这里返回true,才能进 ...

  6. c#线程问题(3)

    //执行回调函数 static void Main(string[] args) { UPPER = ; Thread thread1=new Thread(sops); thread1.Name = ...

  7. RPC框架Thrift例子-PHP调用C++后端程序

    更新 2016-02-22: Response对象不用主动创建. 前言 前段时间用了一下Facebook的开源RPC框架Thrift,做PHP客户端调用C++后端程序,真心觉得Thrift不错! 本文 ...

  8. Java SE ---关系运算符

    java里的关系运算符有这么几种:大于(>).小于(<).等于(==).不等于(!=).大于等于(>=).小于等于(<=), 关系运算的结果是个boolean值,关系式成立为t ...

  9. java中的静态方法

    静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用,内存管理器不会由于静态方法没有被调用而将静态方法的存储空间收回,这样如果将所有的方法都声明为静态方法,就会占用大量的内存空间, ...

  10. CentOS(六)--Linux系统的网络环境配置

    Linux系统下的网络环境配置,Linux.Unix就是网络的世界,所以在Linux系统中如何配置网络环境变量是至关重要的,这里将会给出3种Linux系统下网络环境配置的方法! 在配置网络环境之前,首 ...