C#继承与base关键字问题

dazitou 2012-01-06 01:18:06
namespace ConsoleApplication56
{
class Program
{
static void Main(string[] args)
{
B b = new B();
b.MM();
Console.ReadKey();

}
}
class A
{

public virtual void AA()
{
Console.WriteLine("我是父类");
}
}
class B : A
{

public override void AA()
{
Console.WriteLine("我是子类");
}
public void MM()
{
base.AA();
}
}
}


为什么最后结果是打印“我是父类”呢?不是父类中的AA被子类的AA替换了吗?
...全文
216 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sugarbelle 2012-01-06
  • 打赏
  • 举报
回复
如果你想研究原理..最好学C 而不是C#
dazitou 2012-01-06
  • 打赏
  • 举报
回复
我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
dazitou 2012-01-06
  • 打赏
  • 举报
回复
我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
dazitou 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sugarbelle 的回复:]

override 不叫替换,叫重写,是只影响本类的重写.不影响父类已定义好的方法.

base.AA();//就是父类方法.
this.AA();//就是本类方法.
[/Quote]


我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
sugarbelle 2012-01-06
  • 打赏
  • 举报
回复
override 不叫替换,叫重写,是只影响本类的重写.不影响父类已定义好的方法.

base.AA();//就是父类方法.
this.AA();//就是本类方法.
dazitou 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baysos 的回复:]

base.AA(); 是显示调用父类的AA方法。
[/Quote]



我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
dazitou 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baysos 的回复:]

base.AA(); 是显示调用父类的AA方法。
[/Quote]



我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
dazitou 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 net_lover 的回复:]
你执行的是base.AA();,不是this.AA();
base就是A类,你替换掉了,但你没有使用替换过的方法,还是使用的父类的方法
[/Quote]

我只是想知道继承的原理,比如子类继承了父类,那么子类就可以无条件调用父类中的成员。。。。
这个内部原理是怎么实现的?我可以看成VS自动在子类内部隐形的写出了父类的代码吗?
比如
class 父

public int i;
}

class 子:父

public int i;//隐形代码
public int j;

}


原理是这样吗?
baysos 2012-01-06
  • 打赏
  • 举报
回复
base.AA(); 是显示调用父类的AA方法。
铜臂阿铁木 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 etudiant6666 的回复:]

再思考一下,
A=new B();
A.AA()输出什么?
[/Quote]

oh 液~
窗户纸 2012-01-06
  • 打赏
  • 举报
回复
再思考一下,
A=new B();
A.AA()输出什么?
孟子E章 2012-01-06
  • 打赏
  • 举报
回复
你执行的是base.AA();,不是this.AA();
base就是A类,你替换掉了,但你没有使用替换过的方法,还是使用的父类的方法

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧