今天学到C#的继承那一章,C#和java一样只能是单继承(只能有一个父类),而C++是可以多继承的,学到覆盖和重写时,发现了C#独有的特点:virtual 和 new 的方法继承特点。
父类:
class Person
{
//private成员变量无法被继承 protected成员变量可以被继承 public也行
public string name {get;set;}
public virtual string ID{get;set}
public virtual int sum(int a,int b)
{
return a + b;
}
}
子类
class Student:Person
{
pubic new string name
{
get
{
return _name;
}
set
{
if(value == null | value == "")
{
WriteLine("name can not be null");
}
else
{
_name = value;
}
}
}
private string _name;
public override string ID
{
get
{
return _ID;
}
set
{
if(value ==""|value == null)
{
WriteLine("ID can not be null");
}
else
{
_ID = value;
}
}
}
private string _ID;
public new int sum(int a, int b)
{
return a + 1;
}
}
Main
Student s1 = new Student();
s1.ID = "s1";
Person p1 = s1 as Person;
WriteLine(s1.ID + " *" + p1.ID + "*");
WriteLine(s1.sum(1, 2) +" "+ p1.sum(1, 2));
virtual / override继承下的东西,在子类转父类的时候,将会调用子类的ID;
而new继承下,p1.sum(1,2)将调用父类的方法。
稍作修改:
将new改为override后打印结果为
这里我有个小小的发现,父类中标记为virtual的方法,子类也可以用new来覆盖。
如果时同名方法,C#会以默认为new的方式继承(我觉得new算不上继承吧,没有继承的灵性)
virtual和override 要求签名(参数列表,返回值类型)一致
下面带佬的文章可以更有助于你理解:
详情还可以见:https://www.cnblogs.com/vsSure/p/7816639.htmlt