[英]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);
}
我是初學者,我嘗試了兩種代碼,兩種代碼片段對我來說都很好。
new
,何時不使用new
。 有人可以告訴我這兩種情況的一個例子嗎?有人可以指導我一點嗎?
不僅要看那一行,還要看該方法的其余部分在做什么。 在所有邏輯情況下( if
和else
),該變量都設置為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.