调用inherit和基方法
本文关键字:方法 inherit 调用 | 更新日期: 2023-09-27 18:12:57
我有两个类
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
Console.Write(new string(Name.Reverse().ToArray()));
}
}
我创建了一个新对象B
,我想从A
调用GetName
,从B
调用GetName
B foo = new B("foo");
foo.GetName(); // output "oof"
预期输出"foooof"
我已经尝试过public new void GetName() : base
,但它不能编译
要获得所需的输出,需要调用Class B
的GetName()
方法中的base GetName()
方法。例如:
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
这将输出foooof
使用重写并从重写的方法中调用基类的方法:
public class A
{
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
virtual
关键字用于修改方法并允许在派生类中重写该方法,而new
修饰符隐藏基类方法。通过调用base.GetName();
,您正在执行基本方法BTW,这就是为什么在这里使用new
或override
关键字没有区别,尽管我建议使用override
。
参考文献:
虚拟(C#参考(
知道何时使用覆盖和新关键字
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
根据您的选择使用override或new。喜欢处理这些场景。
A foo = new B("foo");
foo.GetName();
或
A foo = new A("foo");
foo.GetName();
或
B foo = new B("foo");
foo.GetName();
这个msdn链接会给你清晰的画面。