相信大家对C#的继承应该很熟悉了吧,那么看看下面这道题目你做对了吗?
public class A
{
public string Type = "Type A";
public virtual string Show()
{
return "Show "+Type;
}
}
public class B : A
{
public string Type = "Type B";
public override string Show()
{
return "Show "+Type;
}
}
class Program
{
static void Main(string[] args)
{
A a = new B();
Console.WriteLine(a.Type);
Console.WriteLine(a.Show());
Console.ReadLine();
}
}
运行结果
将字段改为属性代码
public class A
{
public string Type
{
get { return "Type A"; }
}
public virtual string Show()
{
return "Show " + Type;
}
}
public class B : A
{
public string Type
{
get { return "Type B"; }
}
public override string Show()
{
return "Show " + Type;
}
}
运行结果
把父类的属性改为virtual 子类override该属性
代码:
public class A
{
public virtual string Type
{
get { return "Type A"; }
}
public virtual string Show()
{
return "Show " + Type;
}
}
public class B : A
{
public override string Type
{
get { return "Type B"; }
}
public override string Show()
{
return "Show " + Type;
}
}
运行结果
我们可以总结一个 结论:
对象方法的调用 取决于对象的实例,也就是说创建的是子类就调用子类的方法
而字段这是和属性则是就近原则,一般情况是读取对象引用类型的字段和属性