在ASP.NET MVC 5中创建对象时何时在C#中使用NEW关键字

Unb*_*ble 5 c# asp.net-mvc asp.net-mvc-5

我是一名初学者,使用C#语言的ASP.Net MVC 5框架学习Web开发.我遇到下面的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

我是初学者,我尝试了两个代码,两个代码都适合我.

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

问题2:何时使用"新"和何时不"使用".有人可以告诉我这两个场景的一个例子.

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

有人可以指导我一点.

Dav*_*vid 5

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

在一般意义上,您可以new在想要创建对象的新实例时使用.您展示的示例不需要这样做,因为它接下来要做的是用另一个实例替换该实例.没有必要创建一些东西只是为了立即抛弃它.


das*_*ght 4

为什么这两个代码都可以正常工作?他们两者有什么区别呢?

最简单的说法是“因为他们做同样的事情”。更具体地说,您的第二个代码片段进行了一个被忽略的分配;除了那一项任务之外,代码是相同的。

何时使用“new”,何时不使用

当所有代码分支都进行分配时(如您的情况),请勿使用new. 当您需要分配一个对象并稍后重新分配它时,请使用new. 如果您在某些情况下不需要对象,但在其他情况下需要它,请使用null代替new

请注意,如果您未分配局部变量,编译器将在第一次读取该变量之前检查所有分支是否为您执行分配:

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