2010-04-01 69 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更详细地解释了这一点,并提供了一些解决方法。