2017-09-21 38 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。你展示的例子不需要這樣做,因爲接下來的事情就是用另一個實例替換那個實例。沒有必要創造一些東西來立即扔掉它。

相關問題