引用的疑惑
看到引用这部分时,遇到一些问题,请高手耐心解答,如果学的好帮忙讲下函数前的static修饰符什么时候该用,请看一下3个小程序,任意回答一个也有分:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
     class Program
     {
         string s;          
         void Fn(ref string a, ref string b)
         {
            s = "one";
            a = "two";
            b = "three";
            Console.WriteLine("{0}  {1}  {2}", s, a, b);
         }
         void G()
         {
             a1.Fn(ref s, ref s);
         }
         static void Main(string[] args)
         {
             Program a1 = new Program();
             a1.G();              
         }
     }
}     // 正确   输出 three  three  three
  ------------------------------------------------------------
现在对上面的程序稍作修改
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
     class Program
     {
         string s;          
         void Fn(ref string a, ref string b)
         {
            s = "one";
            a = "two";
            b = "three";
            Console.WriteLine("{0}  {1}  {2}", s, a, b);
         }
         /*void G()
        {
            a1.Fn(ref s, ref s);
        }*/
         static void Main(string[] args)
         {
             Program a1 = new Program();
             a1.Fn();              
         }
     }
}   //错误   为什么?????????? Error	1	An object reference is required for the non-static field, method, or property 'ConsoleApplication2.Program.s'	
-----------------------------------------
书上说 “在作为引用参数传递之前,实际参数必须明确赋值”
为什么第一个程序中的string s没有明确赋值也正确???
而下面这个对整数的引用没明确赋值却错了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
     class Program
     {              
         static void Fn(ref int a, ref int b) //不用static也要错,什么时候用??????
         {
             a = 1;
             b = 5;
         }    
         static void Main(string[] args)
         {
             int x;
             int y;   //没有明确赋值
             Fn(ref x, ref y);
         }
     }
}
Error	1	Use of unassigned local variable 'x'	
Error	2	Use of unassigned local variable 'y'
------解决方案--------------------不用static也要错,什么时候用??????   Fn(ref x, ref y); 如果不是static方法,就不能在static方法里面直接调用,必须通过实例调用
------解决方案--------------------For 2
  void Fn(ref string a, ref string b)  
You can't use  a1.Fn();  need be a1.Fn(ref s, ref s);
“在作为引用参数传递之前,实际参数必须明确赋值”  
Just for value type, string is reference type
  //不用static也要错,什么时候用??????  
Because your main function use static (static void Main)
------解决方案--------------------另外,实际项目中绝对要禁止 a1.Fn(ref s, ref s); 这种写法
------解决方案--------------------类的字段成员有默认值,而在方法内部的临时变量没有默认值,必须初始化赋值