C#基础一 类型与继承

一:值类型和引用类型

值类型:直接存储数据

引用类型:存储该数据的地址(也就是指针?)

C#中值类型有 基础数据类型(int,float,enum,bool,char,struct.)且值不能为null

而引用类型一般有(class.object.array(数组也算).string)和接口和委托

这种值类型我们可以直接进行赋值copy

比如

int i =1;

int y=i;

这样y也会=1;

而值类型是存储在栈中,在栈中有以下几个特点:空间小,操作快,存储值类型和对象名称

而引用类型存储的对象本体放在堆中,堆的话空间大,操作效率低,存储对象本体

二:C#中的继承

派生和继承本质上指的是一件事情

即 父类派生子类

子类继承父类

<访问修饰符(public,private等)>class<派生类(子类)>:基类( 父类)

public 访问不受限制

private  私有成员在子类不可见,子类中无法直接访问

protect 受保护成员在子类可见

internal C#默认修饰符 即项目内可见

所有父类的成员都会被继承,哪怕是私有的,只是私有的成员无法被直接访问

关键词:base

用于在子类中访问父类成员,指代父类对象

重点:不能在静态方法中使用base,因为base指代的是一个实例

public class  父类(){

  private int a;
  private string b;

public 父类(int a,int b){

this.a=a;

this.b=b;

}

public void 父类方法(){

Debug.Log("执行父类方法....")/*这里用的unity写法不然可以console.write*/
}

}

public class 子类:父类{
    private bool c;
    public 子类(int a,string b,bool c):base(a,b){
        this.c=c;
    }
    public void 子类方法(){
        base.Method1();
        Debug.Log("执行子类 ChildClass 定义的方法 Method2 ....");

    }
}

关键词:Virtual(虚成员) override(重写)

一般而言如果父类方法需要在子类中更改,那么我们需要在父类方法中机上Virtual在子类中使用override

父类:

 public virtual void Attack(Character character) {
        Debug.Log("Chararter 类中定义的 Attack 方法");   
    }

子类:

 public override void Attack(Character character)
    {
        character.HP -= this.Ap;
        Debug.Log($"玩家:{this.Name} 攻击 {character.Name}, {character.Name} 掉血 {this.Ap} 点,剩余血量:{character.HP}");
    }

重点:父类对象可以用子类对象进行赋值

比如Enemy类和player类都继承自charater

我们可以

player.Attack(enemy);

enemy.Attack(player);

猜你喜欢

转载自blog.csdn.net/jijikok/article/details/128795332