假设:
myObject hello = new myObject();
在代码行的第二部分再次指定myObject有什么意义?
你会做点什么:
myObject hello = new anotherObject();
为什么不
myObject hello = new();
答案 0 :(得分:7)
基本多态性。你可以说myObject hello = new derivesFromMyObject()。
答案 1 :(得分:4)
考虑到对象继承/多态的可能性,那么你可以在某些时候做:
BaseObject A = new ChildObject();
答案 2 :(得分:3)
是的,你可以做到
MyObject hello = new AnotherObject()
;
如果AnotherObject是MyObject的子类。
答案 3 :(得分:3)
你听说过多态吗?
如下的作业:
myObject hello = new();
会使其无法实现,因为您无法指定正在创建的对象的实际类型。
您不应该假设变量的类型和变量指向的对象的类型是相同的。这是polymorphism的基础。例如:
Vehicle a = new Car();
Vehicle b = new Bike();
在大多数语言中,对象的类型必须符合变量的类型。在大多数OO语言中,这意味着对象的类型必须是变量类型的相同类型,子类型或实现(cfr。接口)。
答案 4 :(得分:3)
首先,说明两次类型的问题已经解决,只有相反的方式(使用var
关键字):
var someClass = new SomeClass();
并且是的,将变量声明为与实际实例化不同的其他类型通常很有用,例如:
BaseClass b = new ChildClass();
或
MyInterface i = new ClassThatImplementsInterface();
答案 5 :(得分:1)
因为这是定义C#语言的方式。
左侧类型的规格与右侧类型的规格没有多大关系。左侧类型的规范指定了变量的类型。右侧类型的规范指定了要实例化的类型。
var
关键字解决了这个问题,但从您的示例开始,您可以输入:
var hello = new myObject();
我认为足够接近。
答案 6 :(得分:1)
我也想知道同样的问题。
如果我们不使用任何类型的多态和子类型,当我们在同一行创建和实例化对象时(如在您的示例中),A a = new();语法应该被接受......
如果我们不想重复,我们可以使用var关键字,但我不喜欢已知类型的var,它会使代码更复杂一些。
答案 7 :(得分:1)
您拥有var
关键字
var hello = new myObject();
这是同样的简化,只是在另一边。
当你有一个类层次结构时,就会使用它。
class Base {}
class SubA : Base {}
class SubB : Base {}
然后,即使您实例化Base
或SubA
SubB
以下不起作用
SubA hello = new SubA();
hello = new SubB();
答案 8 :(得分:0)
myObject hello = new myObject();
“myObject hello”声明了对象。
“new myObject()”调用myObject的构造函数...有可能你有几个构造函数使用不同的参数集来创建对象的不同风格。