2010-04-01 33 views
1

最近我遇到了一些面試問題。面試官要求給出詳細的答案。ASP.net和WCF對「壓倒一切」進行了一些說明

1)我們可以重寫一個WCF服務(它不是OOPS重寫)嗎?解釋兩端的原因。 (WCF相關)。

2)我們可以重寫頁面事件(Page_Load())嗎?解釋原因。(與ASP.NET相關)。

3)Pre_Init(頁面)事件除了用戶首選項 設置外,還有什麼主要責任?

4),我們可以覆蓋靜態methods.Explain的原因。(有關C#)

誰能幫助我理解的原因?

回答

3
  1. 您無法真正覆蓋WCF服務操作。如果您的服務合同類具有兩個名稱相同但參數不同的服務操作方法(即合法的C#重載),WCF將在服務啓動時拋出InvalidOperationException。如果你真的想這樣做,你可以改變在OperationContract屬性的方法之一的暴露操作名稱:

    [OperationContract(Name = "GetDataWithString")] 
    public string GetData(string input) 
    { 
        ... 
    } 
    
    [OperationContract(Name = "GetDataWithNumber")] 
    public string GetData(int input) 
    { 
        ... 
    } 
    
  2. 可以在ASP.Net覆蓋頁面事件;這是相當廣泛的使用,通常非常重要。您可以明確地覆蓋自定義頁面繼承的Page類中的方法,也可以以ASP.Net知道它們被視爲覆蓋的方式命名方法。例如,使用下面的簽名在頁面的代碼隱藏中聲明方法將自動覆蓋Page_Init方法。

    void Page_Init(object sender, EventArgs e) 
    
  3. Page_Init方法是其中ASP.Net開始跟蹤視圖狀態。這意味着任何對頁面的任何控件所做的任何操作現在都會在ViewState中標記爲Dirty StateBag,並且將在BaseState編碼後發送到ViewState隱藏輸入字段中的客戶端,因此將其發送回服務器回傳。在跟蹤ViewState之前更改控件的值將有助於阻止ViewState變得過大。有關更多詳細信息,請參閱this seminal article

  4. 只有類實例方法可以標記爲virtual,因爲編譯器創建的v-table附加到類實例。靜態類成員不附加到實例,而是附加到類本身,因此無法重寫它們。 This article更詳細地解釋了這一點,並提供了一些解決方法。