十四、面向对象
类的定义
创建一个类
public class Student
{
//构造函数
//字段
public string Name;
public int age;
//属性
//方法
public void Show()
{
Console.WriteLine("我叫{0},今年{1}",Name, age);
}
}
声明类,传参,调用方法
Student student1;//声明了一个student 类
student1 = new Student();//创建了一个student1对象
student1.Name = "xiaoming";
student1.age = 13;
student1.Show();
构造函数
构造函数会在类构造对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数。
说白了,就是给创建的对象赋一定要赋的值。
public class Vehicle
{
//构造函数,创建对象的时候会初始化,这时候会调用构造函数
// 构造函数名字一定要和类名一样
public Vehicle(int Speed1,int MaxSpeed2,int Weight3,int id)
{
this.speed = Speed1;//this指向当前创建的对象
this.MaxSpeed = MaxSpeed2;
this.Weight=Weight3;
this.id1 = id;
}
public int speed;
public int MaxSpeed;
public int Weight;
private int id1;// 私有的变量,只能在类内部使用
private int id2=2;// 私有的变量,只能在类内部使用
//属性 基本结构
public int num
{
get
{//当我去访问num值的时候,num的值由get的返回值决定
Console.WriteLine("访问的时候会执行");
if (id1 * id2 == 5) return 3 ;
return id1*id2;
}
set
{//当我去修改num的值的时候会执行set块中的代码,set会拿到最新的值
id1 = value;
Console.WriteLine("修改的时候会执行得到新的值value为{0}", value);
}
}
public int num2 { get; set; }//作用和字段类似
public void Run()
{
Console.Write("以{0}行驶,最大速度{1}", speed, MaxSpeed);
}
public void Stop()
{
}
}
创建一个车对象 使用的是am2中的类
Vehicle car;
car = new Vehicle(20, 300, 2, 11011);
car.Run();
Console.WriteLine(car.num);
car.num = 3;
car.num = 4;
Console.WriteLine(car.num);
匿名类型
有时候不确定数据的类型
var a = "asdf";//赋值的时候确定了变量的类型
var b = 12;
Console.WriteLine(a);
Console.WriteLine(b);
类的继承
大类中有大家相同的字段,属性,方法,但细分却又有不同
创建一个基类(父类)
class Hero
{
public Hero(string name,int life)
{
this.Name = name;
this.life = life;
}
public string Name { get; set; }
public int life;
public virtual void move() //在基类中定义该方法为虚方法
{
Console.WriteLine(Name+"移动"+life);
}
}
创建一个派生类(子类)
class Metroid:Hero //c#中只支持单继承 要实现多继承使用接口
{
public Metroid(string name,int life,int attack):base(name,life)//把子类中的name和life值传入父类构造方法
{
this.attack = attack;
}
public int attack;
public void shoot()
{
Console.WriteLine(base.Name+"射击");//可以调用父类(base)的属性,方法,字段
}
public override void move()//重写父类虚函数方法
{
base.move();//调用父类move方法,保留父类中的move方法,也可以删除
Console.WriteLine("凤凰之舞");
}
}
测试
Metroid sams = new Metroid("sams",799,10);
sams.shoot();
sams.move();
Hero samsal = new Hero("samsal", 899);
samsal.move();