温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#forUnity快速入门(连载9)-C#值类型与引用类型

发布时间:2020-09-25 17:22:02 来源:网络 阅读:774 作者:Liu_guozhu 栏目:开发技术

C# for Unity 编程语言快速入门教程(连载9)_C#OOP编程之值类型与引用类型


    C#编程语言中有“值类型”与“引用类型”之分。讲这个概念之前,先说明一下什么是“形式参数”(简称:“形参”),什么是“实际参数”(简称“实参”)。


  “形参”("形式参数"): C#方法中的参数列表,即可以称为“形式参数",因为在程序运行之前,我们是不能知道具体的参数到底是什么。


   "实参"("实际参数"): 给C#定义的带参方法,进行实际赋值的代码数值,称为“实参”。因为我们可以知道或者估计实际运行过程中参数的数值类型与数值多少。


   知道以上概念后,我们再来说明“值传递”与“引用传递”

   所谓值传递是指: “实参”传递给“形参”为本身的一个拷贝副本。 
   所谓引用传递指: “实参”传递给“形参”为本身的“地址”作为数值给形参。

   软件编程中正确理解值传递与引用传递,对设计优秀软件有重要作用。
   关于本节知识点,我们总结如下规则:

    规则1: 基本数据类型(int,float ,double,char),都是值传递。
    规则2: 类的实例化对象与数组都是“引用”传递。
    规则3: ref (输入输出)关键字可以把基本数据类型的值传递,改为“引用传递”。
    规则4: 字符串不是基本数据类型,但是它默认也是“值传递”,当然可以通过ref 变为引用传递。      

    一般我们学习本节,还会增加一个常用关键字:out 。 这个关键字定义方法的参数为“输出参数”,使得一个方法,具备多个输出参数。(否则只能用方法的返回类型,做唯一的返回类型)。

   

   为了更好的理解C#的“形参”与“实参”,笔者提供如下习题,供C#初学者进行研究学习,不明之处,欢迎留言讨论!


    //习题:  学习面向对象编程: 值类型与引用类型

    class Program
    {
        
        //值类型
        public void AddNumber(int num1)  //num1 称为 “形参”
        {
            num1 = num1 + 100;
        }

        //引用类型
        public void AddNumberWithRef(ref int num1)
        {
            num1 = num1 + 100;
        }

        //引用类型(传递)
        public void AddNumberByArray(int[] intArray)
        {
            intArray[0] = intArray[0] + 100;
        }

        //引用传递(对象类型)
        public void AddNumberByPerson(Person per)
        {
            per.IntHeight = 200;
            per.strName = "李四";
        }

        //字符串传递
        public void AddNumberByString(ref string str)
        {
            str = str + "大家好!";
        }

        //演示out 关键字的作用
        public void ComputNumber(int intNum1,int intNum2,out int intAddResult,out int intSubResult)
        {
            intAddResult = intNum1 + intNum2;
            intSubResult = intNum1 - intNum2;
        }



        static void Main1(string[] args)
        {
            //Person perObj = new Person();

            Program obj = new Program();
            //int intTestNum = 10;
            //int[] intArray = new int[1];
            //intArray[0] = 20;
            //string strTest = "同学们";

            //"值传递" 测试,传递的是“复制品”
            //obj.AddNumber(intTestNum); //intTestNum 称为“实参” ,结果是:10


            //"引用数据传递"测试。
            //obj.AddNumberWithRef(ref intTestNum);//结果为: 110.
            //obj.AddNumberByArray(intArray);  //结果为: 120;

            //“对象”数据传递
            //obj.AddNumberByPerson(perObj);

            //字符串的传递测试
            //obj.AddNumberByString(ref strTest);  

            //演示out 关键字作用
            int intAddResult = 0;
            int intSubResult = 0;
            obj.ComputNumber(10, 20, out intAddResult, out intSubResult);
            //显示结果
            Console.WriteLine("10+20={0},10-20={1}",intAddResult,intSubResult);
        }
    }



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI