【发布时间】:2011-04-19 19:23:48
【问题描述】:
我对覆盖和隐藏 C# 中的方法有点困惑。每个人的实际用途也将受到赞赏,以及对何时人们将使用每个人的解释。
我对覆盖感到困惑 - 我们为什么要覆盖?到目前为止我了解到的是,通过覆盖我们可以为派生类的方法提供所需的实现,而无需更改签名。
如果我不重写超类的方法,而我对子类中的方法进行了更改,那会不会对超类的方法进行更改?
我也对以下问题感到困惑 - 这说明了什么?
class A
{
virtual m1()
{
console.writeline("Bye to all");
}
}
class B : A
{
override m1()
{
console.writeLine("Hi to all");
}
}
class C
{
A a = new A();
B b = new B();
a = b; (what is this)
a.m1(); // what this will print and why?
b = a; // what happens here?
}
【问题讨论】:
-
经过谷歌后,我一直在这里遇到我的问题......
-
看起来你需要学习基本的 C# 编程概念,然后才能理解方法覆盖和隐藏。尝试周围众多的 C# 初学者书籍之一。
-
1) a.m1(); // 这将打印什么,为什么?简单地说,它会打印
"hai to all",因为您使用的是方法覆盖概念。 2) b = a; // 这里发生了什么?这里我们会得到一个编译错误,因为子类对象不会引用基类对象。根据继承概念,反向是可能的。 -
这不是标记为副本的副本
标签: c# overriding method-hiding