首页 > 学院 > 开发设计 > 正文

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

2019-11-17 02:32:43
字体:
来源:转载
供稿:网友

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

学习大神博客链接: http://www.VEVb.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.VEVb.com/zhili/archive/2013/06/16/StaticAndNonStatic.html

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

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

2, 构造函数执行过程:

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

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

四 参数传递

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

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

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表