public ApiActionResult SaveDocument([ModelBinder(typeof(MyModelBinder))]DocumentVM contentDTO)
这里我们如何将子引用分配给父代?而且b和c是不同的对象类型,那么我们如何将一个分配给另一个?
答案 0 :(得分:2)
a
,b
和c
是A
类型的变量,这意味着它们可以保存对类A
或任何子类的对象的引用A
的{{1}},其中包括B
和C
。
写作时
b = c;
您没有将类C
的对象分配给类B
的变量(不会通过编译),您正在为类{{1}的对象分配引用}(由C
变量持有)到类c
的变量。
答案 1 :(得分:1)
我们如何将子引用分配给父代?
在面向对象的概念中,当您说class B extends A
时,class B
与class A
保持 IS-A 的关系。因此,您可以将B对象作为类型A分配给引用。
b和c是不同的对象类型,然后我们如何分配一个 另一?
即使它们属于不同类型,因为class B
IA-A 类型class A
和class C
(也) IS-A 类型class A
(就他们的关系而言),所以你可以分配B& C对象引用类型A。
但一个重要的一点是,你不能调用指向对象B
的引用类型A
的任何B
特定成员(方法/字段) 即,您只能使用引用类型A
来呼叫A
的成员(即使对象属于B
)。
答案 2 :(得分:1)
由于多态和继承。当你说的时候;
class Manager extends Worker{}
实际上你说,所有经理都是工人。但是经理比工人更具特色。出于这个原因,我们使用extends
关键字进行继承。每个经理都是工人,但更详细的工人。
Worker o1 = new Worker();
Worker o2 = new Manager();
o1 = o2;
在第一行中,o1
是工作对象(通用类型)。
第二行是向上转换的一个例子。这一行说:o2
是一个管理者对象,但o2的界面是工人的界面。
在第三行中,因为每个经理都是一个工人,所以可以将经理对象分配给工人类型参考。