【发布时间】:2013-07-27 16:53:39
【问题描述】:
考虑这段代码:
internal class Program
{
private static void Main(string[] args)
{
var student = new Student();
student.ShowInfo(); //output --> "I am Student"
}
}
public class Person
{
public void ShowInfo()
{
Console.WriteLine("I am person");
}
}
public class Student : Person
{
public void ShowInfo()
{
Console.WriteLine("I am Student");
}
}
在上面的代码中我们没有使用方法隐藏。
当创建学生实例并调用showinfo 方法时,我的输出是I am Student 我不使用new 关键字。
不使用方法隐藏为什么不调用父方法?
【问题讨论】:
-
据我所知,一定有
ambiguity error -
默认方法是隐藏的,即使你使用
new或不使用 -
var这里和Student一样,所以你的代码是Student student = new Student();。你为什么期望student.ShowInfo使用Person.ShowInfo?这将如何运作? -
@Kobi 确切地说它在 Java 或 Python 或任何其他默认方法是虚拟的语言中是如何工作的 - 或者更确切地说,方法隐藏不是默认的,甚至不是语言功能。这是一种 C++ 主义/C# 主义,但情况并非如此,反之亦然,但是对于 OO 语言,这两种选择都不是显而易见的。
-
@millimoose - 除非我遗漏了什么,否则默认情况下虚拟意味着
Person x = new Student(); x.ShowInfo()将使用Student.ShowInfo。这很好,而且我个人更喜欢 Java 的方法而不是 C# 的方法。这里有Student x = new Student()。
标签: c# method-hiding