【发布时间】:2016-03-06 11:59:07
【问题描述】:
由于类的多态性属性,下面的示例将打印AB 两次,这是预期的。
就我而言,我真的希望它先打印A,然后再打印AB。
我决定将B 中的Get() 方法从overrides 更改为new。
这解决了我的问题,但他们告诉我有不好的做法,所以我正在寻找替代方案......
想到的一件事是instantiate a new A in B.Do(),我认为这也是不好的做法......
//ORIGINAL
class Program
{
static void Main(string[] args)
{
var b = new B();
b.Do();
}
}
public class A
{
public virtual void Do()
{
var get = Get();
Console.WriteLine(get);
}
public virtual string Get()
{
return "A";
}
}
public class B : A
{
public override void Do()
{
base.Do();
var get = Get();
Console.WriteLine(get);
}
public override string Get()
{
return base.Get() + "B";
}
}
//UPDATED, USING NEW
class Program
{
static void Main(string[] args)
{
var b = new B();
b.Do();
Console.ReadLine();
}
}
public class A
{
public virtual void Do()
{
var get = Get();
Console.WriteLine(get);
}
public virtual string Get()
{
return "A";
}
}
public class B : A
{
public override void Do()
{
base.Do();
var get = Get();
Console.WriteLine(get);
}
public new string Get()
{
return base.Get() + "B";
}
}
【问题讨论】:
-
不是重复的,而是对我认为您正在寻找的功能的引用:MyClass equivalent in C#
-
@Damien_The_Unbeliever 这也可能是我的问题的解决方案。谢谢你,我会读进去的。
标签: c# .net oop inheritance polymorphism