一,相同点:二者都是引用类型变量。   

二,不同点:见下

 class paramtest
    {
        void testRef(ref int i)
        {
            i++;
        }

        void testOut(out int i)
        {
            i = 1; // --(3)
            i++;       
        }

        static void Main(string[] args)
        {
            int pRef = 1; //--(1)

            int pOut; //-(2)

            paramtest p = new paramtest();
            p.testRef(ref pRef );  //使用ref为标志符时,参数变量必须被声明且初始化,如(1)
            Console.WriteLine("pRef={0}",pRef);

            p.testOut(out pOut);

            //使用out 为标志符时,参数变量必须被声明而不需要初始化,如(2)

            //但是在调用的方法体中必须为该变量进行初始化,如(3)
            Console.WriteLine("pOut={0}",pOut); 

            Console .Read ();

        }
    }