2017-09-21 36 views
5

我是一位初学者,学习使用C#语言的ASP.NET MVC 5框架进行Web开发。我碰到下面的代码:在ASP.NET MVC中创建对象时何时使用C#中的NEW关键字5

Scenrio 1:没有对象创建中使用的关键字。

[AuthorizeFunc] 
[BlockWidget] 
public PartialViewResult WidgetPayments() 
{  
    PaymentFormMV data; // No New Keyword used 
    if (SimUtils.IsDelayedPaymentAllowed) 
    { 
     data = Pay.GetData(PaymentPageMode.DelayedPayment); 
    } 
    else 
    { 
     data = PayHelp.GetData(PaymentPageMode.MakePayment); 
    } 
    return PartialView("PaymentsWrapper", data); 
} 

Scenrio 2:关键字在创建对象使用。

[AuthorizeFunc] 
[BlockWidget] 
public PartialViewResult WidgetPayments() 
{  
    PaymentFormMV data = new PaymentFormMV(); // New Keyword used 
    if (SimUtils.IsDelayedPaymentAllowed) 
    { 
     data = Pay.GetData(PaymentPageMode.DelayedPayment); 
    } 
    else 
    { 
     data = PayHelp.GetData(PaymentPageMode.MakePayment); 
    } 
    return PartialView("PaymentsWrapper", data); 
} 

我是初学者,我都尝试代码,并两个代码工作正常我。

问题1:为什么两个代码工作正常?

问题2:何时使用“新”,何时不使用“。有人可以告诉我两种情况的一个例子。

问题3:两者之间有什么区别。

有人可以指导我一点。

+1

非静态类需要用新的实例化关键词。这可能是因为GetData方法返回一个带有新的PaymentFormMV对象的值。 –

回答

3

为什么这两个代码工作正常?他们之间有什么区别?

把它放在最简单的方法将是“因为他们做同样的事情”。更具体地说,你的第二个代码片段做了一个被忽略的分配;除此之外,代码是相同的。

当在代码的所有分支进行分配,如你的情况用“新”,当不使用

,不要使用new。当需要分配对象时,稍后重新分配对象时,请使用new。如果在某些情况下不需要对象,但在其他情况下需要它,请使用null而不是new

请注意,如果你离开一个局部变量未分配时,编译器会检查是否所有分支做作业你变量的第一次读之前:

PaymentFormMV data; 
if (SimUtils.IsDelayedPaymentAllowed) 
{ 
    data = Pay.GetData(PaymentPageMode.DelayedPayment); 
} // No "else" 
return PartialView("PaymentsWrapper", data); // Compile-time error 
1

在这两种情况下,您都在您的if语句中创建对象的新实例,因此无论它是否被构造和分配实例最初是无关紧要的,因为它被替换。

如果您在第一个实例中声明后立即查询对象,您会看到它为空,而在第二个实例中它将是PaymentsFormMV。

+1

只是一个小细节:它将是未初始化的,而不是空的。默认情况下字段初始化为空,本地变量不是。 –

+0

@MatthiasMeid,'object'变量是,值类型是'default(T)',其中'T'是值类型。例如,“int”默认为“0”,而不是“null” – DiskJunky

5

看看不仅仅是这一行,看看该方法的其余部分正在做什么。在所有逻辑情况下,(ifelse),该变量设置为,其值为。 (假设.GetData()方法成功返回了某些内容)。

在一般意义上,当您要创建对象的新实例时使用new。你展示的例子不需要这样做,因为接下来的事情就是用另一个实例替换那个实例。没有必要创造一些东西来立即扔掉它。

相关问题