最近我遇到了一些面試問題。面試官要求給出詳細的答案。ASP.net和WCF對「壓倒一切」進行了一些說明
1)我們可以重寫一個WCF服務(它不是OOPS重寫)嗎?解釋兩端的原因。 (WCF相關)。
2)我們可以重寫頁面事件(Page_Load())嗎?解釋原因。(與ASP.NET相關)。
3)Pre_Init(頁面)事件除了用戶首選項 設置外,還有什麼主要責任?
4),我們可以覆蓋靜態methods.Explain的原因。(有關C#)
誰能幫助我理解的原因?
最近我遇到了一些面試問題。面試官要求給出詳細的答案。ASP.net和WCF對「壓倒一切」進行了一些說明
1)我們可以重寫一個WCF服務(它不是OOPS重寫)嗎?解釋兩端的原因。 (WCF相關)。
2)我們可以重寫頁面事件(Page_Load())嗎?解釋原因。(與ASP.NET相關)。
3)Pre_Init(頁面)事件除了用戶首選項 設置外,還有什麼主要責任?
4),我們可以覆蓋靜態methods.Explain的原因。(有關C#)
誰能幫助我理解的原因?
您無法真正覆蓋WCF服務操作。如果您的服務合同類具有兩個名稱相同但參數不同的服務操作方法(即合法的C#重載),WCF將在服務啓動時拋出InvalidOperationException
。如果你真的想這樣做,你可以改變在OperationContract
屬性的方法之一的暴露操作名稱:
[OperationContract(Name = "GetDataWithString")]
public string GetData(string input)
{
...
}
[OperationContract(Name = "GetDataWithNumber")]
public string GetData(int input)
{
...
}
您可以在ASP.Net覆蓋頁面事件;這是相當廣泛的使用,通常非常重要。您可以明確地覆蓋自定義頁面繼承的Page
類中的方法,也可以以ASP.Net知道它們被視爲覆蓋的方式命名方法。例如,使用下面的簽名在頁面的代碼隱藏中聲明方法將自動覆蓋Page_Init方法。
void Page_Init(object sender, EventArgs e)
的Page_Init
方法是其中ASP.Net開始跟蹤視圖狀態。這意味着任何對頁面的任何控件所做的任何操作現在都會在ViewState中標記爲Dirty StateBag
,並且將在BaseState編碼後發送到ViewState隱藏輸入字段中的客戶端,因此將其發送回服務器回傳。在跟蹤ViewState之前更改控件的值將有助於阻止ViewState變得過大。有關更多詳細信息,請參閱this seminal article。
只有類實例方法可以標記爲virtual
,因爲編譯器創建的v-table附加到類實例。靜態類成員不附加到實例,而是附加到類本身,因此無法重寫它們。 This article更詳細地解釋了這一點,並提供了一些解決方法。