理解C#中的out参数与类成员

需积分: 0 1 下载量 122 浏览量 更新于2024-08-20 收藏 356KB PPT 举报
"此资源主要介绍了`out`参数在编程中的使用,以及类和方法的相关概念,包括类的成员、成员访问限制和静态与非静态成员的差异。" 在编程中,`out`参数是一个特殊的关键字,它允许方法返回多个结果。与普通的参数不同,`out`参数不需要在调用方法之前进行初始化。这意味着当你调用一个带有`out`参数的方法时,你可以在不知道其初始值的情况下传递这个参数。方法内部会负责赋值给`out`参数,并且在方法执行完毕后,你可以获取到这些值。这种方法在需要返回多个数据项但不希望创建复杂的返回类型时非常有用。 举例来说,假设你有一个计算整数数组平均值和最大值的方法,你可以使用`out`参数来实现: ```csharp public void Calculate Stats(int[] numbers, out double average, out int max) { int sum = 0; int maxNumber = numbers[0]; foreach (int number in numbers) { sum += number; if (number > maxNumber) { maxNumber = number; } } average = (double)sum / numbers.Length; max = maxNumber; } ``` 在这个例子中,`average`和`max`都是`out`参数,它们会在方法内部被赋值,然后在方法调用结束后,调用者可以通过这两个参数获取计算的结果。 接下来,我们讨论类的成员。类是面向对象编程的基础,它可以包含数据成员(字段)和函数成员(方法)。数据成员存储类的属性,而函数成员定义了类的行为。例如,`Person`类可能有`name`和`height`字段,以及一个`Eat`方法。 成员访问限制是控制类的内部数据和行为对外可见性的关键。C#提供了四种访问修饰符:`private`、`protected`、`internal`和`public`。`private`成员只能在类的内部访问,`public`成员则可以从任何地方访问。例如,如果一个`Student`类的`name`字段被声明为`private`,那么在类的外部是无法直接访问的。如果将其改为`public`,则可以在类的外部自由地读写这个字段。 静态成员与非静态成员是类的两个重要组成部分。非静态成员(如字段和方法)与类的实例(对象)关联,每个对象都有自己的副本。而静态成员属于类本身,不依赖于任何特定的实例,它们在类的整个生命周期中只有一份。静态成员可以通过类名直接访问,而无需创建对象。例如,静态方法通常用于工具类,提供与对象状态无关的功能。 总结而言,`out`参数提供了一种方法返回多个值的方式,而类和方法则是面向对象编程的核心。理解类的成员、成员访问限制以及静态和非静态成员的概念,对于编写可维护和高效的代码至关重要。

SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。

2023-06-02 上传