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);
        }
    }

时间: 2024-08-01 02:09:25

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

C# for Unity 编程语言快速入门教程(连载8)---C#OOP编程之抽象类与接口

C#的抽象类与接口,是C#OOP编程中非常重要的概念,对于开发出"高内聚.低耦合"的优秀项目具有重要的作用. C#抽象类是用关键字abstract 表示的,它即可以修饰类(抽象类),也可以修饰方法(抽象方法).抽象类主要的作用是:列举一个类所需要的行为,提供一系列的规定,约束子类行为. C#抽象类与抽象方法具备以下重要规则: 1:抽象类不能被实例化. 2:抽象类不明确提供具体 方法实现.(但可以包含普通的方法) 3:定义基类(父类)中的抽象方法,则派生类(子类)必须重载(重写)该方法.

15个快速学习苹果Swift编程语言的入门教程

要说今年最火的编程语言是什么.那就非Swift莫属了.当然最主要还是市场炒的比较热,加上官方Swift教程<The Swift Programming Language>在北航的大三学生发起在github上进行协同翻译获得了很高的人气,短短几天时间内<Swift中文版>第一版就发布.这真是不火不行了. Swift是苹果公司在WWDC2014上发布的全新开发语言.从演示视频及随后在appstore上线的标准文档看来,语法内容混合了OC,JS,Python,语法简单,使用方便,并可与O

C#基础与实例教程最简单的C#快速入门教程【转自:http://www.82011433.com/Html/?6982.html】

c#基础与实例教程最简单的C#快速入门教程 在一小时内学会C#.使用例程,简单却完整的探索C#语言的构造和特点.本文特别适合有C++基础却没有太多精力学习C#的读者. 简介 C#是一种具有C++特性,Java样式及BASIC快速建模特性的编程语言.如果你已经知晓C++语言,本文将在不到一小时的时间内带你快速浏览C#的语法.如果熟悉Java语言,Java的编程结构.打包和垃圾回收的概念肯定对你快速学习C#大有帮助.所以我在讨论C#语言构造的时候会假设你知道C++. c#基础与实例教程最简单的C#快

C#游戏开发快速入门教程

C#游戏开发快速入门教程 C#游戏开发快速入门 试读文档下载地址:http://pan.baidu.com/s/1eQeSl0Y C#是微软发布的高级程序设计语言,这门语言和C语言一样,已经成为了大学计算机相关专业必学的一门语言.很多初学这门语言的同学,还以为C#只能开发Windows桌面应用程序了,写写ASP.NET网站.本书将为读者纠正这种观念,使用C#一样可以开发出精彩的游戏! 学习所需的系统和软件 安装Windows 7操作系统 安装Unity 4.5.1 目  录 第1章  使用C#编

C语言快速入门教程(二)

C语言快速入门教程(二) C语言的基本语法 本节学习路线图: 引言: C语言,顾名思义就是一门语言,可以类比一下英语; 你要说出一个英语的句子需要:  单词  +  语法!  将单词按照一定的语法拼凑起来就成了一个英语句子了; C语言同样是这样,只不过单词可以理解为一些固定的知识点,而语法可以理解为算法(可以理解为解决问题的方法) 在这一节中我们就对固定知识点中的语言描述与数据存储进行解析! 1.C语言的基本元素 1.1  标识符 什么是标识符? 答:在C语言中,符号常量,变量,数组,函数等都需

CMake快速入门教程-实战

http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/details/6314073 http://www.cnblogs.com/coderfenghc/archive/2013/01/20/2846621.html http://blog.sina.com.cn/s/blog_4aa4593d0100q3bt.html http://hahack.com/c

C语言快速入门教程(一)

C语言快速入门教程(一) C语言概述(开发准备) 本节学习路线图: ps:标记3的表示不是很重要,知道有这个东西就行了;标记1表示非常重要,需要熟练掌握! 1.C语言的概述: 1.1  计算机与程序设计语言之间的关系? 答:计算机是由硬件与软件系统组成的;硬件---->物质基础;软件----->灵魂; 如果脱离了软件,计算机就是一台什么都做不了的裸机; 可以形象地比喻成人的大脑和身体;两个互不可缺! 1.2  程序设计语言的更新换代: 1.3 C语言的特点 1.4  最简单的HelloWorl

EntityFramework6 快速入门教程

EntityFramework6 快速入门教程 不得不说EF在国内实在是太小众,相关的技术文章真实屈指可数,而且很多文章都很旧了,里面使用的版本跟如今的EF6差别还是比较大.我刚开始弄这个的时候真是绕了不少弯路. 学习EF还是需要一些条件,使用EF并不意味着你就可以完全不跟数据库打交道了,要学好EF,数据库中的什么主键.外键.索引.SQL等你还是要懂,另外EF中将大量使用LINQ来进行数据查询,数据模型中还将涉及到特性与泛型,所以对于C#的基础要求还比较高. 在我看来EF并不适合初学者使用,虽然

Velocity快速入门教程

Velocity快速入门教程-脚本语法详解(转) 1.变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析和重新解释,如下所示: #set($directoryRoot = "www" ) #set($templateName = "index.vm" ) #set($template = "$directoryR