这里使用的是哪一类?C#

这里使用的是哪一类?C#,c#,instantiation,C#,Instantiation,如果我有一个基类“base”和一个派生类“derived”,那么哪一个是可以的 Base b = new Base(); Derived d = new Derived(); (上面2行可以) 它们有什么意义吗?@Zuzlx的评论恰到好处: 所有的牛都是动物,但不是所有的动物都是牛 将Base替换为Animal,将Derived替换为Cow,这样会更加清晰: Animal a = new Cow(); // This works since a cow is always an animal

如果我有一个基类“base”和一个派生类“derived”,那么哪一个是可以的

Base b = new Base();
Derived d = new Derived();
(上面2行可以)


它们有什么意义吗?

@Zuzlx的评论恰到好处:


所有的牛都是动物,但不是所有的动物都是牛

Base
替换为
Animal
,将
Derived
替换为
Cow
,这样会更加清晰:

Animal a = new Cow();  // This works since a cow is always an animal.
Cow c = new Animal();  // Just won't work.

不能将基实例指定给派生类型的变量。其他一切都是有效的。所有的牛都是动物,但不是所有的动物都是牛。我强烈建议你搜索和阅读多态性教程,这个问题的完整答案太宽泛了,不适合简单的问答,简单的“是的,xyz没问题”显然帮不了你多少忙,也可以。你为什么不试试呢?这会比在这里发帖更快。如果您需要文档,请参阅此结束原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说都是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件”以及“Animal a=new Cow();”创建Cow或Animal类的实例?它创建
Cow
类的实例,但您只能将其引用为
Animal
类,这意味着您只能访问
Animal
提供的成员/方法。如果需要访问
Cow
特定成员/方法,则需要
cast
将其返回到
Cow
Animal a = new Cow();  // This works since a cow is always an animal.
Cow c = new Animal();  // Just won't work.