C# 调用重写方法

C# 调用重写方法,c#,C#,下面显示了我的3个类:Person、Employee和salareyemployee 每个类(从右侧)从左侧继承该类。例如:SalaryEmployee继承自Employee class Person { private string address; private string name; public Person(string givenName, string givenAddress) { name = givenName;

下面显示了我的3个类:
Person
Employee
salareyemployee

每个类(从右侧)从左侧继承该类。例如:
SalaryEmployee
继承自
Employee

class Person
{
    private string address;
    private string name;

    public Person(string givenName, string givenAddress)
    {
        name = givenName;
        address = givenAddress;
    }

    public virtual void outputName()
    {
        MessageBox.Show("My name is " + name);
    }

    public void outputAddress()
    {
        MessageBox.Show("My address is " + address);
    }

    public void setName(string newName)
    {
        name = newName;
    }

    public void setAddress(string newAddress)
    {
        address = newAddress;
    }
}

class Employee : Person
{
    private string NINumber;

    public Employee(string givenName, string givenAddress) : base(givenName, givenAddress)
    {
    }

    public void setNINumber(string givenNumber)
    {
        NINumber = givenNumber;
    }

    public void getNINumber()
    {
        MessageBox.Show("My National Insurance Number is " + NINumber);
    }
}

class SalaryEmployee : Employee
{
    private string name;
    private string address;

    public SalaryEmployee(string givenName, string givenAddress) : base(givenName, givenAddress)
    {
        name = givenName; address = givenAddress;
    }

    public override void outputName()
    {
        MessageBox.Show("My name is " + "S_" + name);  
    }
}
OOP对我来说是相当新的,我正试图掌握继承的诀窍。我面临的问题是,我创建了一个名为“PersonFive”的对象:

SalaryEmployee personFive = new SalaryEmployee("Bob", "North Pole");
//忽略我用作参数的地址“North pole”,它仅用于本例

我能够调用
.outputName()
方法,输出将是:

"My name is Bob"

但是,将调用基方法而不是重写的方法。我希望它给我的输出是“我的名字是S_Bob”

它对我有用,你可能没有发布导致错误的实际代码


它对我有效,您可能没有发布导致错误的实际代码


我建议您在Console应用程序中创建一个非常简单的示例,并检查覆盖方法的行为。代码可以工作,但您不必在SalaryEmployee中创建第二个“name”变量。Person类应该有一个非私有名称属性(您现在有一个私有字段)。然后,输出将是“我的名字是S_”+base.name;我懂了。谢谢。我建议您在Console应用程序中创建一个非常简单的示例,并检查覆盖方法的行为。代码可以工作,但您不必在SalaryEmployee中创建第二个“name”变量。Person类应该有一个非私有名称属性(您现在有一个私有字段)。然后,输出将是“我的名字是S_”+base.name;我懂了。谢谢。这应该是评论而不是回答。它实际上并没有回答这个问题。对不起,我当时没有发表评论的特权(低于15分),但我试着帮忙。现在,你否决了另一个点。无论如何,谢谢。如果你没有代表评论,正确的做法是继续,而不是添加一个实际上不是答案的“答案”。这应该是一个评论而不是答案。它实际上并没有回答这个问题。对不起,我当时没有发表评论的特权(低于15分),但我试着帮忙。现在,你否决了另一个点。无论如何,谢谢。如果你没有代表评论,正确的做法是继续,而不是添加一个实际上不是答案的“答案”。