如何在C#中创建子类的实例?
public class Parent
{
public virtual void test()
{
Console.WriteLine("this is parent");
}
}
public class Child : Parent
{
public override void test()
{
Console.WriteLine("this is from child");
}
}
public static void main()
{
//Which one is right below?
Child ch = new Child();
Parent pa = new Parent();
ch = new Parent();
pa = new Child();
ch.test();
pa.test();
}
答案 0 :(得分:3)
在您的代码中,您有四个实例,这些实例意味着略有不同:
// create a new instance of child, treat it as an instance of type child
Child ch = new Child();
// create a new instance of parent, treat it as an instance of parent
Parent pa = new Parent();
// this will not compile; you cannot store a less specialized type in a variable
// declared as a more specialized type
Child ch = new Parent();
// create a new instance of child, but treat it as its base type, parent
Parent pa = new Child();
哪一个(有效的三个)正确取决于你想要达到的目标。
请注意,以下两种情况都打印“这是来自孩子”:
Child ch = new Child();
ch.test();
Parent pa = new Child();
pa.test();
答案 1 :(得分:2)
如果您想要Child
的实例,则new Child()
是正确的选择。但是,由于Child
是Parent
的特化,您可以通过Child
或Parent
引用(ch
和{{1}来引用它在你的例子中)。
因此,您必须决定是以pa
还是Child
来访问该实例。
如果你这样做
Parent
您有Child ch = new Child();
类型的引用,ch
指向Child
的实例。
如果你这样做
Child
您有Parent pa = new Child();
类型的引用,pa
指向Parent
的实例。即你正在利用继承在Child
和Parent
之间建立“是一种”关系这一事实。
换句话说,Child
类型是Child
的特化。因此,Parent
的实例可以在需要Child
的实例的任何地方使用。
答案 2 :(得分:1)
这往往比你想象的更基础! 我建议你阅读一篇解释你遗产的文章。多态性,例如msdn,msdn或codeproject
对我来说,更多的是给出解释而不是解决方案......