最近我遇到了一些面试问题。面试官要求给出详细的答案。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更详细地解释了这一点,并提供了一些解决方法。