面向对象是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述各个事物在解决问题的步骤中的行为。
面向对象的优点
易维护、易复用、易扩展,由于面向对象有封装、集成、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易维护。
类和对象
类可以理解为类别,是具备某些共同特征的实体的集合,它是一种抽象的数据类型,他是对所具有相同特征实体的抽象。
类的创建
访问修饰符 class 类名{类成员}
class Person{
public string name;
public void Chat(){
console.WriteLine("我是" + name + ",你在干啥");
}
}
对象的创建
类名 对象名
BeautifulGirl ml = new BeautifulGirl();
字段和方法
字段就是描述一个类 特征的变量
创建字段
访问修饰符 数据类型 变量
class Person{
public string name;
public int age = 18;
private string hobby;
}
默认访问修饰符为private,字段也可以设置初值
字段的访问
对象名.字段名
Person zhangsan = new Person();
zhangsan.name = "zhangsan";
zhangsan.age = 18;
//爱好,无法访问到私有字段
// zhangsan.hobby
console.WriteLine("姓名:{0},年龄:{1}",zhangsan.name,zhangsan.age);
方法
方法就是封装了一段有特定功能的代码段
方法就是用来描述一个类的行为
方法创建
访问修饰符 返回值类型 方法名(参数列表){
代码块
return 值
}
方法的调用
返回值类型 变量名 = 对象名.方法名(参数列表);
无参无返回值方法
public void introduceMe(){
console.WriteLine($"我叫{this.name}");
console.WriteLine($"今年{age}岁了");
console.WriteLine($"爱好是{hobby}");
}
this关键字
this表示当前对象,如无重名现象,可以省略
无参有返回值方法
public int GetGrade(){
int grade = age - 6;
if(grade < 0 || grade > 12){
grade = 0;
}
return grade;
}
有参无返回值方法
public void SetNewHobby(string newHobby){
Console.WriteLine($"我有了新的爱好{mewHobby}");
hobby += newHobby;
}
有参有返回值方法
public string[] SetNewFamilyMember(string newMember, MemberType memberType){
switch (memberType) {
case MemberType.Wife:
Console.WriteLine("恭喜你有了新的家庭成员(妻子):" + newMember);
familyMembers[1] = newMember;
break;
case MemberType.Child:
Console.WriteLine("恭喜你有了新的家庭成员(孩子):" + newMember);
familyMembers[2] = newMember;
break;
default:
break;
}
return familyMembers;
}
简单的小例子
using System;
using System.Collections.Generic;
using System.Text;
namespace CF
{
public enum Sex {
男,
女
};
//武器类型
enum WeaponType
{
AKM,
M416,
M24,
}
//武器类
class Weapon
{
//武器名称
public string name;
//武器攻击力
public int atk;
//武器类型
public WeaponType type = WeaponType.AKM;
public Weapon(string name,int atk,WeaponType type)
{
this.name = name;
this.atk = atk;
this.type = type;
}
}
//玩家类
class Player
{
//名字
public string name;
//性别
public Sex sex;
//年龄
public int age;
//血量
public int hp;
//武器
public Weapon weapon;
//武器背包
public Weapon[] weapons = new Weapon[10];
public Player()
{
//添加武器
weapons[0] = new Weapon("AKM",250,WeaponType.AKM);
weapons[1] = new Weapon("M416", 200, 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("嘤嘤嘤,{0}阵亡了",name);
Environment.Exit(0);
}
}
//战斗攻击
public void AttackPlayer(Player player)
{
//攻击敌人
player.GetHit(weapon.atk);
}
//自我介绍
public void introduce()
{
Console.WriteLine("我是{}",name);
}
}
}
注意:要记得引用名称空间
using System;
//注意这里要引用名称空间CF
using CF;
namespace ConsoleApp_7._21
{
class Program
{
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 = 250;
player2.EquipWeapon(player2.weapons[1]);
//攻击
player1.AttackPlayer(player2);
player2.AttackPlayer(player1);
}
}
}