Using system; using system. collections. generic; using system. in text; namespace CSHARP, the ref and out keywords use {class program {/* parameter to describe the difference between * ref and out in C #. You can either pass parameters through values or references. You can pass a parameter through reference to allow function members to change the parameter value and keep the change. To pass parameters through references, you can use the ref or out keyword. Both the ref and out keywords provide similar functions, and they also act like pointer variables in C. The difference between them is: 1. When using ref parameters, the input parameters must be initialized first. For out, initialization must be completed in the method. 2. When using ref and out, the ref or out keyword must be added to both the method parameters and the execution method. To match. 3. Out is suitable for use where multiple retrun return values are required, while ref is used when the caller's reference is modified by the method to be called. Note: in C #, there are four types of method parameters passed: by value, by reference, and output parameter (by output ), array parameters (by array ). There is no additional modifier for the value passing parameter. The address passing parameter requires the modifier ref, the output parameter requires the modifier out, And the array parameter requires the modifier Params. If the value of the parameter is changed during a method call, the parameter passed in to the method does not change after the method call is completed, but retains the original value. On the contrary, if the value of the parameter is changed during the method call process, the parameters for passing in the method also change after the call is completed. In fact, we can clearly see the meaning of the two from the name-the pass-through parameter transfers a copy of the call parameter, while the transfer parameter passes the memory address of the call parameter, this parameter points to the same storage location inside and outside the method. The ref method parameter keyword in the method parameter allows the method reference to pass to the same variable of the method. When the control is passed back to the call method, any changes made to the parameters in the method will be reflected in this variable. To use the ref parameter, you must explicitly pass the parameter as the ref parameter to the method. The ref parameter value is passed to the ref parameter. Parameters passed to the ref parameter must be initialized first. Compared with the out parameter, the latter parameter does not need to be explicitly initialized before being passed to the out parameter. Attributes are not variables and cannot be passed as REF parameters. If the declarations of the two methods are only different in their use of ref, an overload will occur. However, it is not possible to define a unique reload for ref and out. The out method parameter keyword on the out method parameter enables the method reference to pass to the same variable of the method. When the control is passed back to the call method, any changes made to the parameters in the method will be reflected in this variable. When you want the method to return multiple values, it is very useful to declare the out method. You can still return a value using the out parameter. A method can have more than one out parameter. To use the out parameter, you must use the parameter as the out parameter to pass it to the method explicitly. The value of the out parameter is not passed to the out parameter. You do not need to initialize the variable passed as the out parameter. However, the out parameter must be assigned a value before the method is returned. The property is not a variable and cannot be passed as an out parameter. There are many articles on the internet saying that ref only transmits values, out transmits addresses, and so on. It does not seem very accurate. The following is my instance code. You can try it: Public int refvalue (int I, ref Int J) {int K = J; j = 222; return I + k ;} public int outvalue (int I, out Int J) {J = 222; return I + J;} private void cmdref_click (Object sender, eventargs e) {int m = 0; MessageBox. show (refvalue (1, ref m ). tostring (); MessageBox. show (M. tostring ();} private void cmdout_click (Object sender, eventargs e) {int m; MessageBox. show (outvalue (1, out M ). Tostring (); MessageBox. Show (M. tostring ();} according to a summary on the internet, ref is inbound and outbound, but out is outbound. */Static void main (string [] ARGs) {console. writeline ("****************************** C # ref and out keyword usage * ****************************"); int A = 10; int B = 11; int I = outvalue (A, out B); console. writeline ("value of A:" +. tostring (); console. writeline ("value of B:" + B. tostring (); console. writeline ("Return Value:" + I. tostring (); console. readline ();}/* ref Parameter Using * function is mainly used to test the ref keyword using */public static int refvalue (int I, ref Int J) {int K = J; j = 222; return I + k;} public static int outvalue (int I, out Int J) {J = 222; return I + J ;}}}