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


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

  • 相关阅读:
    Git 命令 stash cherry-pick reset rebase
    【操作系统】不同语言的线程实现机制对比及数据库锁问题
    【数据结构】搜索二叉树(BST)和普通二叉树的序列化与反序列化
    【自制编译器】读书笔记 -- JavaCC使用的JJ文件格式
    leetcode 874 Robot Simulation
    hihocoder 编程挑战赛75
    浪漫主义的起源--以赛亚柏林
    【美团笔试 2018-4-20 】编程题-1 测例100%通过 欧拉函数求解gcd
    【POJ SOJ HDOJ】HDU 2196 Computer 树中的最长路径
    【Java 核心】多线程笔记
  • 原文地址:https://www.cnblogs.com/hijushen/p/4313394.html
Copyright © 2020-2023  润新知