c#type = new type()是什么意思?

时间:2011-01-28 13:11:33

标签: c#

假设:

myObject hello = new myObject();

在代码行的第二部分再次指定myObject有什么意义?

你会做点什么:

myObject hello = new anotherObject();

为什么不

myObject hello = new();

9 个答案:

答案 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 {}

然后,即使您实例化BaseSubA

,您也可能希望将变量声明为SubB

以下不起作用

SubA hello = new SubA();
hello = new SubB();

答案 8 :(得分:0)

myObject hello = new myObject();

“myObject hello”声明了对象。

“new myObject()”调用myObject的构造函数...有可能你有几个构造函数使用不同的参数集来创建对象的不同风格。