为什么要使用beginInvoke和DebuggerStepThroughAttribute以及其他属性

时间:2011-12-29 09:23:01

标签: c# .net serialization attributes begininvoke

当我浏览一些代码示例时,我注意到以下属性,我不明白它们是如何使用的。这个类似乎是从xsd生成的。

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="FlightHistoryGetRecordsSOAPBinding", Namespace="http://www.pathfinder-xml.com/FlightHistoryService.wsdl")]


[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("FlightHistoryGetRecordsResponse", Namespace="http://pathfinder-xml/FlightHistoryService.xsd")]

也无法理解以下方法:

public System.IAsyncResult BeginFlightHistoryGetRecordsOperation(FlightHistoryGetRecordsRequest FlightHistoryGetRecordsRequest, System.AsyncCallback callback, object asyncState) {
        return this.BeginInvoke("FlightHistoryGetRecordsOperation", new object[] {
                    FlightHistoryGetRecordsRequest}, callback, asyncState);
    }

    /// <remarks/>
    public FlightHistoryGetRecordsResponse EndFlightHistoryGetRecordsOperation(System.IAsyncResult asyncResult) {
        object[] results = this.EndInvoke(asyncResult);
        return ((FlightHistoryGetRecordsResponse)(results[0]));
    }

所以我有以下问题:
1.每个属性做什么 2.属性的回报是什么?
3. FlightHistoryGetRecordsResponse方法中使用的参数是什么?为什么它会返回this.BeginInvoke

2 个答案:

答案 0 :(得分:3)

1a:DebuggerStepThough属性表示当遇到断点且编码器正在逐步执行代码时,调试器将跳过此方法而不是暂停每一行。

1b:DesignerCategory属性表示该类的分组是否/何时出现在设计时控件中,例如visual studio中的属性网格。

1c:WebServiceBinding属性将名称和命名空间附加到代表Web服务的类。

重要的是要理解属性不“做”任何事情,它们只包含元数据,并且由代码的其他部分决定如何处理元数据。

2:属性前面的return语句表示该属性适用于从方法返回的值,而不是方法本身。同样,您可以将属性应用于方法参数。在这种情况下,该属性描述了如何将返回值序列化为XML。

3:这类似于常规请求/响应Web服务调用,但它已被修改为异步。 AsyncCallback是一个应该在异步操作强制执行时调用的方法,返回值是AsyncResult,可用于检查代码其他部分的运行操作。这是异步方法调用的旧模式,您再也找不到这种代码了。 See Async Pattern on MSDN...

答案 1 :(得分:0)

Attribute中的return将属性赋给方法的返回类型,类似于assembly:AssemblyInfo.cs中的Someattribute。

BeginInvoke异步调用方法并返回一个对象,该对象为您提供该调用的状态信息以及获取最终结果的方法。

有关所有属性的说明,我建议您阅读MSDN文档并提出具体问题。