C# 泛型方法

iamzxf發表於2015-04-24

    泛型方法是使用型別引數宣告的方法。使用泛型方法時,編譯器可以根據傳入的方法實參推斷型別形參,此時可以省略指定實際泛型引數,但編譯器不能根據返回值推斷泛型引數。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace genericMethodDemo
{
    class Program
    {
        static void swap<T>(ref T x, ref T y)
        {
            T temp;
            temp = x;
            x = y;
            y = temp;
        }
        static void Main(string[] args)
        {
            int a = 1, b = 2;
            Console.WriteLine("{0},{1}",a,b);
            swap<int>(ref a, ref b);
            Console.WriteLine("{0},{1}", a, b);

            double aa = 1.2, bb = 2.3;
            Console.WriteLine("{0},{1}", aa, bb);
            swap(ref aa, ref bb);
            Console.WriteLine("{0},{1}", aa, bb);
            Console.ReadLine();
        }
    }
}

    如果是在泛型類中定義了泛型方法,泛型方法的泛型引數最好與泛型類的泛型引數不相同,否則會產生如下警告:"型別形參與外部型別中的型別形參同名"但該警告不影響程式的執行,如果要去掉該警告,為其中一個泛型引數提供另一個識別符號即可。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace genericClass2
{
    class genericClass<T>
    {
        public void Swap<T>(ref T x, ref T y)
        {
            T temp;
            temp = x; x = y; y = temp;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            genericClass<int> aa = new genericClass<int>();
            int a = 3, b = 4;
            Console.WriteLine("{0},{1}",a,b);
            aa.Swap<int>(ref a, ref b);
            Console.WriteLine("{0},{1}", a, b);
            Console.ReadLine();
        }
    }
}



相關文章