天天看點

c#如何擴充類型的内置方法

c#3.0(VS2008)支援在任何類型上擴充生成自定義的方法。比如說想在string類型的對象裡面多一個ToInt32(),來友善的将字元轉換成整形。

在實作的過程中的關鍵字為static和this

下面我們來做一個在string類型中建立一個ToInt32的自定義方法

c#如何擴充類型的内置方法
c#如何擴充類型的内置方法
View Code

public static class Extension//必須先聲明一個靜态類,類名随意
    {
public static int ToInt32(this string In)//擴建的方法必須是靜态方法,參數裡面必須含有this關鍵字,this關鍵字後面的類型為需要擴充的類型
        {
return Convert.ToInt32(In);
        }
    }      

那麼在使用string的對象的時候,會多出一個ToInt32的方法

c#如何擴充類型的内置方法
c#如何擴充類型的内置方法
static void Main(string[] args)
{
string a = "1";
int b = a.ToInt32();
       Console.ReadLine();
 }      

既然可以擴充.net的内置類型,那能不能擴充自定義類型呢。

c#如何擴充類型的内置方法
c#如何擴充類型的内置方法
public class A//先定義A類
    {
    }

public static class Extension//必須先聲明一個靜态類,類名随意
    {
public static int ToInt32(this string In)//擴建的方法必須是靜态方法,參數裡面必須含有this關鍵字,this關鍵字後面的類型
        {
return Convert.ToInt32(In);
        }
//為A新增一個ExtensionMethod方法
        public static string ExtensionMethod(this A a)//擴建的方法必須是靜态方法,參數裡面必須含有this關鍵字,this關鍵字後面的類型
        {
return "this is extension method";
        }
    }      

在使用A的對象的時候,會多出一個ExtensionMethod方法

c#如何擴充類型的内置方法
c#如何擴充類型的内置方法
static void Main(string[] args)
{
string a = "1";
int b = a.ToInt32();
      A c = new A();
string d = c.ExtensionMethod();
      Console.ReadLine();
}      

C#3.0的這個新特性意味着我們可以肆無忌憚的擴充我們想要擴充的類型,即便這個類型是從别的地方引用過來的。