2012-09-30 54 views
8

我正在讀一本有關使自定義主體的教程,和我遇到的代碼:什麼是受保護的虛擬新

public class BaseController : Controller 
{ 
    protected virtual new UserPrincipal User 
    { 
     get { return HttpContext.User as UserPrincipal; } 
    } 
} 

究竟如何,是「受保護的虛擬新」的工作?

關鍵詞「新」是最讓我困惑的。

+0

它包含在文檔中:http://msdn.microsoft.com/en-us/library/435f1dw2.aspx它應該始終是您的第一個電話號碼 –

回答

21

protected意味着它只在該類和從它派生的類中可見。

virtual表示它可以在派生類中被覆蓋。

new意味着在此創建新的覆蓋層次結構,即停止覆蓋基類中定義的方法並用此方法替換它。

更多細節可以發現here

+0

而且大多數時候這是一個壞主意引入一個類的'new'成員,隱藏已經存在的成員(從基類繼承)。爲什麼不只是爲該屬性選擇另一個名稱(而不是'User'),該名稱與已經存在的成員沒有衝突? –

+0

那麼,Controller.User已經從基類和Controller.CustomUser中有點沒有意義了。我喜歡這個新東西,它使我的代碼變得乾淨。感謝Zdeslav的詳細解釋。 –

6

new用於會員隱藏。

與重寫方法不同,new方法不會被引用基類調用。

查看documentation

3

你的關鍵的問題:「關鍵字new什麼是最我混淆了」

簡短回答:newoverride是互斥的。 new用於替換從基類繼承的類成員。相比之下,override用於擴展成員的基類實現。

new Modifier (C# Reference)(Visual Studio的2013年)

這是同一部件上使用兩種override, 因爲這兩個修飾符互斥的含義的錯誤。 修飾符創建一個具有相同名稱的新成員,並導致 原始成員隱藏。 覆蓋修飾符擴展了繼承成員的 實現。

相關問題