您的位置:首页 > 其它

同名笔记《你必须知道的.net》(二) 继承的本质与引用类型内存机制

2012-02-07 12:49 344 查看
上一篇博文也说了一点关于内存的知识,但是不详尽,这篇博文彻底的理解了从.net层面理解 引用类型的内存分配--->引用类型的堆内的工作,以及继承的本质。

(说的不对,大家指正)

继承
面向对象:实现单继承和接口多继承
对于.net通过访问权限的修饰符控制安全:public protected internal private
抽象方法和虚方法才可以被重写override,而且虚方法不能是private才可以被重写,抽象方法必须是public.
接口的默认是公共抽象的方法,而且被继承了,必须被实现。

1.继承机制的执行

View Code

public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("Animal always eat.");
}
}
public class Bird : Animal
{
public string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
private string color;
public string Color
{
get { return color; }
set { color = value; }
}
}
public class Chicken : Bird
{
public string type = "Chicken";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
public void ShowColor()
{
Console.WriteLine("Color is {0}", Color);
}
}

public class TestInheritance
{
public static void Main()
{
Bird bird2 = new Chicken();
Console.WriteLine(bird2.type);//bird 就近原则

bird2.ShowType();//Type is Chicken,为什么,这里就没有就近原则?

}
}


疑惑3:bird2.ShowType();//Type is Chicken,为什么,这里就没有就近原则?
答:这里创建的是 Chicken对象,所以加载父类Bird方法表和自己的方法表,如果有重写就覆盖,这里覆盖了,所以没有使用就近原则。
上面 bird2.type,因为没有被覆盖,编译器认为是2个不同的变量,所以就近原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐