目录

  • 1 项目一 设计贪吃蛇游戏界面
    • 1.1 任务一 分析贪吃蛇游戏需求(DV)
    • 1.2 任务二 学习C#入门知识(D)
    • 1.3 任务三 编写控制台应用程序(V)
    • 1.4 任务四 编写窗体应用程序(V)
    • 1.5 任务五 项目实训
    • 1.6 习题一
  • 2 项目二 实现随机画图
    • 2.1 任务一了解目标和内容
    • 2.2 任务二 学习C#语言的数据类型(D)
    • 2.3 任务三 学习C#语言的运算符和表达式(V)
    • 2.4 任务四 学习GDI+初步(V)
    • 2.5 任务五 项目实训
    • 2.6 习题二
  • 3 项目三 绘画游戏图形元素
    • 3.1 任务一 了解学习目标和项目内容
    • 3.2 任务二 学习顺序与选择结构(D)
    • 3.3 任务三 学习选择结构的窗体应用(V)
    • 3.4 任务四 学习while和do-while循环
    • 3.5 任务五 学习for循环(V)
    • 3.6 任务六 项目实训(V)
    • 3.7 习题三
  • 4 项目四 用方法升级游戏程序
    • 4.1 任务一 了解学习目标和项目内容
    • 4.2 任务二 学习方法的定义与调用(DV)
    • 4.3 任务三 学习方法的嵌套调用(V)
    • 4.4 任务四 学习方法的递归调用(DV)
    • 4.5 任务五 学习方法的参数(V)
    • 4.6 任务六 学习方法重载
    • 4.7 任务七 项目实训(V)
    • 4.8 习题四
  • 5 项目五 用类升级贪吃蛇游戏
    • 5.1 任务一 了解学习目标和项目内容
    • 5.2 任务二 学习面向对象基本概念(D)
    • 5.3 任务三 学习类和对象(V)
    • 5.4 任务四 学习类的静态成员
    • 5.5 任务五 掌握构造函数与析构函数
    • 5.6 任务六 学习对象作参数与返回值为对象(V)
    • 5.7 任务七 项目实训(V)
    • 5.8 习题五
  • 6 项目六 用继承实现同形不同质的物体
    • 6.1 任务一 了解学习目标和项目内容
    • 6.2 任务二 学习基类和派生类(DV)
    • 6.3 任务三 学习派生类构造函数(V)
    • 6.4 任务四 掌握从派生类中隐藏基类成员
    • 6.5 任务五 学习密封类和密封方法
    • 6.6 任务六 学习抽象类和抽象方法(V)
    • 6.7 任务七 项目实训(V)
    • 6.8 习题六
  • 7 项目七 用数组设置游戏元素对应属性
    • 7.1 任务一 了解学习目标和项目内容
    • 7.2 任务二 学习一维数组的声明和创建(DV)
    • 7.3 任务三 学习一维数组的应用
    • 7.4 任务四 学习多维数组
    • 7.5 任务五 学习对象数组(V)
    • 7.6 任务六 学习索引器
    • 7.7 任务七 项目实战(V)
    • 7.8 习题七
  • 8 项目八 利用覆写减少游戏程序耦合
    • 8.1 任务一了解学习目标和项目内容(D)
    • 8.2 任务二 学习编译时多态(V)
    • 8.3 任务三 学习运行时多态(V)
    • 8.4 任务四 项目实训(V)
    • 8.5 习题八
  • 9 项目九 用接口实现多种食物
    • 9.1 任务一了解学习目标和项目内容
    • 9.2 任务二 学习接口的声明与实现(D)
    • 9.3 任务三 学习接口成员的显式实现
    • 9.4 任务四 学习接口与继承(V)
    • 9.5 任务五 学习接口与抽象类
    • 9.6 任务六 项目实战
    • 9.7 习题九
  • 10 项目十 建立分值变化事件
    • 10.1 任务一 了解学习目标和项目内容
    • 10.2 任务二 学习委托
    • 10.3 任务三 学习事件(V)
    • 10.4 任务四 项目实训(V)
    • 10.5 习题十
  • 11 项目十一 保存玩家记录
    • 11.1 任务一了解学习目标和项目内容
    • 11.2 任务二 学习System.IO命名空间和流
    • 11.3 任务三 学习文件的操作
    • 11.4 任务四 学习获取文件基本信息
    • 11.5 任务五 学习文本文件写入和读取(V)
    • 11.6 任务六 学习二进制文件写入和读取
    • 11.7 任务七 项目实训(V)
    • 11.8 习题十一
  • 12 项目十二 处理游戏数据读写异常
    • 12.1 任务一了解学习目标和项目内容
    • 12.2 任务二 学习异常处理的结构(DV)
    • 12.3 任务三 学习System.Exception类的使用(V)
    • 12.4 任务四 项目实训(V)
    • 12.5 习题十二
    • 12.6 课程结语
  • 13 计算机软件技术应用工程师(C#)
    • 13.1 训练一
    • 13.2 训练二
    • 13.3 训练三
    • 13.4 训练四
    • 13.5 训练五
  • 14 课程配套资源
    • 14.1 课标
    • 14.2 课件
    • 14.3 教案
    • 14.4 案例参考
    • 14.5 论文
    • 14.6 专著
      • 14.6.1 获奖
    • 14.7 教材
任务六 学习对象作参数与返回值为对象(V)
  • 1 基础知识
  • 2 案例—采访
  • 3 注意事项

大家先看一个故事。张三和李四同时受雇于一家店铺,拿同样的薪水。一段时间后,张三青云直上,李四却原地踏步。李四想不通,老板为何厚此薄彼?

老板于是说:“李四,你现在到集市上去一下,看看今天早上有卖土豆的吗?”一会儿,李四回来汇报:“只有一个农民拉了一车土豆在卖。”

“有多少?”老板又问。

李四没有问过,于是赶紧又跑到集上,然后回来告诉老板:“一共40袋土豆。”

“价格呢?”

“您没有叫我打听价格。”李四委屈地申明。

于是赶紧又跑到集上,然后回来告诉老板:“3元一斤。”

“全买下可以打几折?”

……

老板又把张三叫来:

“张三,你现在到集市上去一下,看看今天早上有卖土豆的吗?”

张三也很快就从集市上回来了,他向老板汇报说:

“今天集市上只有一个农民卖土豆,我把那个农民带来了,他现在正在外面等您问话呢……”

张三的效率高,是因为他把一个封装所有有效信息的农民(对象)带回来了。而李四每次只带回一条信息。同理,对象作为参数或返回值传递效率要高。

此场景对应的程序包:(点击下载)bossFaculty.rar(下载附件 25.15 KB)

补充视频:警察抓小偷(可拖放)


头脑风暴:

一位名叫洪七的老记者(男,65岁)在街上采访一位名叫曾帅的路人(男,28岁)。记者问小伙子:“帅哥,贵姓?”小伙子回答记者:“哥姓曾!”

讨论:

1.这个场景可以定义多少个类呢?

2.可以用定义的类产生哪几个对象?

3.老记者对象要实现对曾帅这个小伙子对象的采访,如何在采访的方法中实现参数的传递(即对象之间的通信)呢?






值类型变量与引用类型变量

C#的数据类型分为两大类:值类型和引用类型。两种类型的变量在内存中的存储原理不同。

(1)值类型

简单地说,值类型变量就是一个包含实际数据的量。当定义一个值类型变量时,C#会根据变量所声明的类型分配一块堆栈存储区域给这个变量,然后对这个变量的读写就直接在这块内存区域进行。值类型包括简单类型(bool、int、double等)、结构类型和枚举类型。

上述有关值类型变量间赋值的代码解析如下:

‍int num1=139;//为num1分配一个4字节的存储区域,并将139存入这个存储区域

int num2=num1;

//为num2分配一个4字节的存储区域,并将num1的值复制后存入这个存储区域

num2=100;//将100存入num2 对应的存储区域‍

值类型变量间的赋值,赋的是变量值,赋值运算符两边的num1和num2是两个不同的存储区域,改变num2的值不会影响num1。


(2)引用赋值

引用类型变量存储的不是它所代表的实际数据,而是该实际数据的引用(地址)。创建一个引用类型变量,首先在堆栈内创建一个引用变量,然后在堆内分配一块存储区域来存储对象本身,再把对象在堆内的存储区域首地址赋值给引用变量。引用类型变量通常称为对象。引用类型包括类、接口、数组、委托和string等。

上述有关引用类型变量间赋值的代码解析如下:

‍Number num1=new Number()       //创建并实例化一个引用变量num1

num1.Value=139;                //为num1 的成员Value赋值为139

Number num2=num1;              //创建一个引用变量num2,令num2指向num1所引用的对象,两者                                                      //共同引用一个对象

num2.Value=100;                //修改num2的成员值为100,由于num2和num1共同引用一个对象,                                                    //其实就是修改num1的成员‍

 

引用类型变量的赋值只是赋值对象的引用,而不复制对象本身。变量num1和num2共同引用一个对象,对其中任何一个做修改,另一个都会随之改变。

注意:引用类型变量的值与引用类型变量所引用的对象的区别:引用类型变量的值是一个地址,引用类型变量所引用的对象是该地址所指向的一个对象。


返回值与参数



    方法的返回值可以是int、double等系统标准类型,也可以是用户自定义的类型,两者的用法没什么两样。调用时注意类型一致性。




    因为C#的数据类型分为值类型和引用类型,传递参数的方式有传值方式和传引用方式,组合一下,C#传递参数有4种情况:值类型按传值方式传递,值类型按传引用方式传递,引用类型按传值方式传递,引用类型按传引用方式传递。