zoukankan      html  css  js  c++  java
  • 值类型与引用类型(特殊的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 参数.

  • 相关阅读:
    【STM32F429】第11章 ThreadX中断优先级配置,含BasePri配置方案
    【STM32H7】第10章 ThreadX任务栈大小确定及其溢出检测
    【STM32F429】第10章 ThreadX任务栈大小确定及其溢出检测
    《安富莱嵌入式周报》第216期:2021.06.07--2021.06.13
    嵌入式新闻早班车-第3期
    嵌入式新闻早班车-第2期
    Keil Studio已经确定为MDK下一代开发工具,更多功能将在今年年底上线
    嵌入式新闻早班车-第1期
    【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
    【STM32F429的DSP教程】第32章 STM32F429的实数FFT的逆变换(支持单精度和双精度)
  • 原文地址:https://www.cnblogs.com/hijushen/p/4313394.html
Copyright © 2011-2022 走看看