在C#中,“Customer cust = new Customer();”是什么做?

时间:2009-07-28 23:45:34

标签: c#

Customer cust = new Customer();

Customer是一个班级。 cust是指定的名称。我不确定Customer()做了什么......

这条线做什么?我们为什么需要它?是不是CustomerCustomer()有点重复?

12 个答案:

答案 0 :(得分:49)

它创建Customer()的新实例,并将对新创建的对象的引用分配给变量cust

如果你想删除重复你正在使用C#3.0或更高版本它是一个局部变量,你可以使用:

var cust = new Customer();

完全具有相同的含义 - 它仍然是静态类型的,即变量cust仍然非常明确地属于Customer类型。

现在,在这种情况下发生了重复,但两个Customer位完全是分开的。第一个是变量的类型,第二个用于表示要调用的构造函数。它们可能是不同的类型:

Customer cust = new ValuedCustomer();
IClient cust = new Customer();
object cust = new Customer();

等。这只是因为您创建的的实例与重复发生的变量类型相同。

答案 1 :(得分:22)

宣告客户,然后对其进行初始化。

Customer cust; //declares a new variable of Customer type

cust = new Customer(); //Initializes that variable to a new Customer().

new创建实际对象,cust hold是对它的引用。

空括号表示没有参数传递Customer对象的构造,否则括号内会有逗号分隔的参数列表。

答案 2 :(得分:5)

Customer()是Customer类的构造方法。如果您对重复感到困扰,可以使用隐式变量声明:

var cust = new Customer();

答案 3 :(得分:4)

第一个Customer定义cust变量的数据类型。 new Customer()部分创建Customer类的实例并将其分配给变量。

但是,数据类型不是Customer。如果Customer类继承了另一个类(比如Person)或接口(比如IPayer),你可以将它定义为

Person cust = new Customer();
IPayer cust = new Customer();

这是面向对象编程中Polymorphism的基本原则之一。

答案 4 :(得分:3)

Customer cust

明确声明cust属于Customer类型。

Customer cust = new Customer();

通过构建新的Customer来初始化它。

另见Implicitly Typed Local Variables (C# Programming Guide)

请记住,LHS变量不必与RHS上构造的对象的类型相同。例如,如果CustomerContact的子类,

Contact cust = new Customer();

请参阅Liskov substitution principle

答案 5 :(得分:2)

简单明了:
它创建了一个新的类客户对象。

答案 6 :(得分:2)

它声明了一个名为Customer的{​​{1}}对象,并为其分配了一个新的类实例,没有将参数传递给对象的构造函数。

答案 7 :(得分:1)

这不仅仅是C#所做的,Objective C和Java也是这样做的。您需要定义将用于该变量的类。然后你感到困惑的是,那部分是启动类并将其分配给变量的。

NSString *string = [[NSString alloc] initWithString:@"Test"];

您可能需要查看Typcasting

答案 8 :(得分:1)

如果你像我一样讨厌重复性,请使用var

var cust = new Customer();

...而且cust现在强烈和静态类型作为客户的实例

答案 9 :(得分:1)

使用

var cust = new Customer();

避免重复。一般来说,模式是存在的,所以你

1)声明一个名为cust的Customer实例 2)初始化它。并不是说你可以有其他的初始化方式,如

Customer cust = CustomerProvider.NextCustomer();

答案 10 :(得分:0)

此行实例化您的对象。基本上,这意味着您有一个Customer对象的新实例,该实例设置为其预设默认值。

答案 11 :(得分:0)

这是C#的java-esque风格。这是您在Java中用于声明新对象的确切语法。

如果您仍然感到困惑,虽然已经有了很好的答案,但如果您像“int i”一样想到“客户委托”,可能会让您感到困惑。您正在声明某个类型(客户)的新变量(cust)。

如果您是面向对象编程的新手,那只需要一些耐心。 OO的思考起初有点令人困惑,但一旦点击,你就会终生得到它。