C#中,让一个类变成另一个类的子类只需要在命名空间后加上:b
比如说现在是有两个类:Fruit,Apple,Apple是Fruit的子类
class Fruit
{
protected string from, birth;
public Fruit(string fro,string birt)
{
from = fro;
birth = birt;
}
public Fruit() { }
public void Hello()
{
Console.WriteLine("These are Fruits");
}
}
class Apple:Fruit
{
double val;
public Apple(string fro,string birt,double val):base(fro,birt)
{
this.from = fro;
this.birth = birt;
this.val = val;
}
public new void Hello()
{
base.Hello();
Console.WriteLine("I am apple,I'm from {0},each pound {1}$",from,val);
}
}
只需要在Apple后面加上:Fruit即可,之后Apple类就继承了Fruit的一些东西,若是想保证Fruit中的一些变量或者方法的隐私,但是又想Apple能调用它,那么就可以用protect来声明。在父类中重载带参数的重载方法的时候,子类有两种重载方法,一是把父类的重载包括进去,末尾加上:base(……),或者可以在父类中再写一个重载不带参数的重载方法。
如果子类中声明了与父类一样的方法,那么就可以在类型面前加上new来保证使用的是子类的方法,若是想调用父类同名的方法则可以加上base.Hello()。
还有,在主函数中声明子类不能用父类,会报错
但是用子类声明父类并且在赋值给子类则是可以的。
virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑。
现在我也不太清除Virtual的用处,大概就是可以在子类中重新声明,这样就是多态了吧。
class Vehicle
{
protected string name;
public Vehicle(string nam)
{
name = nam;
}
public Vehicle() { }
public virtual string Turn(string s)
{
return "The " + name + " will turn " + s;
}
}
class Car:Vehicle
{
public Car(string nam)
{
this.name = nam;
}
public override string Turn(string s)
{
return "new";
}
}
在声明Car变量的时候,输出的就是new了。