面向对象
这玩意贼难,哈哈 之前写的那些都是面向过程的,C#是高级语言,他是面向对象。不过不用慌,先举一个简单的例子解释一下面向过程与面向对象。
假如说今天我中午饭想吃一盘炒肉。。。嗯,这句话的需求是想吃炒肉。
如果我们用之前面向过程的思维去考虑的话,那我们首先要做的是先拿钱,然后去市场买肉,然后在带回家切肉,然后在放到锅里炒肉,最后开吃。这种就叫面向过程,因为所有的事情都要自己去一步一步做。
那么如果我们要用面向对象的思维,应该这样思考,我要先找能做炒肉的饭店,然后到了那边直接叫服务员,然后点一盘,等他上肉就行了,直接就可以开吃了。
面向对象的思维是省去了中间的步骤,把需要的功能直接封装起来,直接调用,如果中途碰策划说改需求了,那么我们只要把封装起来的方法改下就可以了,不会影响调用
类
类是一个抽象的概念,实例化之前叫类,实例化之后叫对象,类里分两种,一种叫特征(变量,字段),一种叫行为(函数,方法)
声明一个类,结果就是对象,对象是类的实体,类是对象的抽象。
语法
访问修饰符 class 类名{
类成员
}
//访问修饰符不写默认就是internal
//字段默认是private
【internal】 class Person{
【private】 string name;
public int age;
public void Eat(){
}
}
实例化
类名 对象名 = new 类名();
访问时候 对象名.字段名
方法
方法分四种:无参无返回值方法、有参有返回值方法、有参无返回值方法、无参有返回值方法
访问修饰符 返回值类型 方法名(参数列表)
{
代码块
return 值
}
举一个例子:
/*
创建CF当中的玩家类Player,该类含有字段:名字,性别,血量,武器。
武器背包当中匕首,步枪,机枪,狙击枪。
玩家类具有以下方法:
(1)自我介绍Introduce方法
(2)换武器装备
(3)受到攻击掉血,当血量小于等于0的时候玩家死亡
(4)攻击其他玩家的方法
*/
using System;//系统自动引用命名空间
namespace MyTestNs//这是别的脚本的名字,我就直接写一块了,没新建脚本
{
/// <summary>
/// 创建一个枚举,用来分出性别
/// </summary>
enum Sex//性别
{
Man,//男
Woman//女
}
/// <summary>
/// 武器类型 枚举
/// </summary>
enum WeaponType
{
AKM,
M416,
M24
}
/// <summary>
/// 武器类
/// </summary>
class Weapon
{
/// <summary>
/// 武器名字
/// </summary>
public string name;
/// <summary>
/// 攻击
/// </summary>
public int atk;
/// <summary>
/// 初始装备哪把枪
/// </summary>
public WeaponType type = WeaponType.AKM;
/// <summary>
/// 构造函数
/// </summary>
public Weapon(string name ,int atk ,WeaponType type)
{
this.name = name;
this.atk = atk;
this.type = type;
}
}
/// <summary>
/// 玩家类
/// </summary>
class Player
{
/// <summary>
/// 玩家姓名
/// </summary>
public string name;
/// <summary>
/// 玩家性别
/// </summary>
public Sex sex;
/// <summary>
/// 年龄
/// </summary>
public int age;
/// <summary>
/// 血量
/// </summary>
public int hp;
/// <summary>
/// 武器
/// </summary>
public Weapon weapon;
/// <summary>
/// 用来存储的武器数组
/// </summary>
public Weapon[] weapons = new Weapon[10];
public Player()
{
weapons[0] = new Weapon("AKM", 250, WeaponType.AKM);
weapons[1] = new Weapon("M416", 100, WeaponType.M416);
}
//装备武器
public void EquipWeapon(Weapon weapon)
{
this.weapon = weapon;
}
//受到攻击
public void GetHit(int damage)
{
hp -= damage;
Console.WriteLine(name + "收到了" + damage + "点伤害");
//判断死亡
if (hp <= 0)
{
Console.WriteLine("玩家死亡");
}
}
/// <summary>
/// 攻击玩家
/// </summary>
/// <param name="player"></param>
public void AttackPlayer(Player player)
{
player.GetHit(weapon.atk);
}
public void Introduce()
{
Console.WriteLine("我叫" + name);
}
}
//主函数
static void Main(string[] args)
{
//实例化一个玩家
Player player1 = new Player();
player1.name = "李逍遥";
player1.hp = 200;
player1.EquipWeapon(player1.weapons[0]);
//实例化玩家二
Player player2 = new Player();
player2.name = "王小虎";
player2.hp = 20;
player2.EquipWeapon(player2.weapons[1]);
//攻击
player1.AttackPlayer(player2);
player2.AttackPlayer(player1);
}
}