關于C#的編程知識
AAA.cs
namespace ConsoleApplication1
{
static class AAA
{
public static void BBB(this object a)
{
System.Console.WriteLine("Hello");
}
}
}
Program.cs
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String a = new String('a',6);
a.BBB();
}
}
}
網上查了下蛉艾,給的解釋是:
C#3.0的擴展方法丈钙,this后面跟需要擴展的類陈惰,這里既然是object疏咐,說明任何類都可以使用這個方法扬舒。String自然屬于object阐肤,所以String的對象a可以使用BBB()方法,就這么簡單,達到了擴展一個類的方法的目的孕惜。本來沒有BBB()方法的object類愧薛,現在多出來了BBB()方法。
另外要說明的是衫画,你有沒有發(fā)現那個BBB()方法在調用的時候并沒有參數毫炉,而申明的時候有個參數,不過是this標識的參數削罩,因為那個參數的特殊意義(用來指明需要擴展的類)瞄勾,所以其實那個方法是無參數的方法,你如果需要添加一個參數弥激,可以在后面再加一個參數进陡,比如:
AAA.cs
namespace ConsoleApplication1
{
static class AAA
{
public static void BBB(this object a,string input)
{
System.Console.WriteLine("Hello");
System.Console.WriteLine(input);
}
}
}
Program.cs
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String a = new String('a',6);
a.BBB("測試一下");
}
}
}
注意了:C#擴展方法的聲明必須是靜態(tài)類和靜態(tài)方法,你看這里都標注了static就是這個原因微服,使用的時候無需靜態(tài)四濒。
namespace ConsoleApplication1
{
//類AAA就是包含擴展方法的類 必須為靜態(tài)
static class AAA
{
//this只是一個編譯上的要求,作為一個提示來告訴編譯器此方法有可能作為擴展方法來使用
//object是要擴展的類型职辨,也可以為其他 如:String
//a就是參數內容了
public static void BBB(this object a)
{
System.Console.WriteLine("Hello");
//此處應該改為輸出傳入的參數a,否則沒意義
//System.Console.WriteLine(a);
}
}
}
Program.cs
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String a = new String('a',6);
//因String繼承Object盗蟆,所以可以使用BBB
a.BBB(); //如果BBB()方法像上面那樣改了 就會輸出6個a
}
}
}