簡體   English   中英

在 ASP.NET MVC 5 中創建對象時,何時在 C# 中使用 NEW 關鍵字

[英]When to use NEW keyword in C# when creating an object in ASP.NET MVC 5

我是一名初學者,正在學習使用 C# 語言中的 ASP.Net MVC 5 框架進行 Web 開發。 我遇到了以下代碼:

場景 1:對象創建中沒有使用New關鍵字。

[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);
}

場景 2:對象創建中使用的New關鍵字。

[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:何時使用new ,何時不使用new 有人可以告訴我這兩種情況的一個例子嗎?
  • 問題三:兩者有什么區別?

有人可以指導我一點嗎?

不僅要看那一行,還要看該方法的其余部分在做什么。 在所有邏輯情況下( ifelse ),該變量都設置為something (假設.GetData()方法成功返回了一些東西。)

一般而言,當您要創建對象的新實例時,可以使用new 您展示的示例不需要這樣做,因為它接下來要做的就是用另一個實例替換該實例。 沒有必要創造一些東西只是為了立即扔掉它。

為什么這兩個代碼都可以正常工作? 它們之間有什么區別?

最簡單的表達方式是“因為他們做同樣的事情”。 更具體地說,您的第二個代碼片段進行了一個被忽略的分配; 除了那一項任務外,代碼是相同的。

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

當所有代碼分支都進行分配時,就像您的情況一樣,不要使用new 當您需要分配一個對象,然后稍后重新分配時,請使用new 如果在某些情況下不需要對象,但在其他情況下確實需要它,請使用null而不是new

請注意,如果您未分配局部變量,編譯器將在第一次讀取變量之前檢查所有分支是否為您分配:

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

在這兩種情況下,您都是在 if 語句中創建對象的新實例,因此它是否被構造並分配了最初的實例是無關緊要的,因為它被替換了。

如果您在第一個實例中聲明后立即查詢對象,您會看到它為空,而在第二個實例中它將是一個 PaymentsFormMV。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM