您的位置:首页 > 编程语言 > C#

扩展方法入门

2013-08-03 18:50 183 查看
1. 扩展方法的定义

通过前一节的实例学习,我们了解到:扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。使用扩展方法,可以向现有类型“添加”方法。

下面,再给出一个实例,希望通过对这个实例的学习,能进一步加深对扩展方法的理解。

首先,创建扩展方法:

public static class ExtendFunction
{
public static void  Print(this object o)
{
Console.WriteLine(o);
}
}

接下来,添加方法调用的代码:

static void Main(string[] args)
{
//
string s = "hell,world!";
s.Print();

//
int i = 32;
i.Print();
}

执行程序,得到以下结果:



在这个实例中,扩展方法接收的参数类型为object,所以,对于任意的 object 使用这个方法应该都是合法的。于是,在前面代码的基础上,增加一个TestClass类,并使用该类的实例来调用这个方法,看看结果如何。新的代码如下:

class TestClass
{
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
public bool IsMarried { get; set; }
public String Note { get; set; }

public TestClass()
{
Name = "tiana0";
Age = 1800;
Sex = "非人类";
IsMarried = false;
Note = "1800岁的非人类,你敢嫁给他吗";
}
}

class Program
{
static void Main(string[] args)
{
//
string s = "hell,world!";
s.Print();

//
int i = 32;
i.Print();

//
TestClass testClass = new TestClass();
testClass.Print();
}
}

执行结果如下:



很显然,使用自己定义的类的实例来调用这个方法也是可行的,只是,输出的是类的名称信息,要想输出类的成员信息,可以使用下面的代码:

testClass.Name.Print();
testClass.Age.Print();
testClass.Sex.Print();
testClass.IsMarried.Print();
testClass.Note.Print();

再次执行程序,结果为:



这样,类的成员信息也可以被输出了。

这里可能会用人问,我们使用TestClass.Print() 可不可以呢?结果很显然,各位,你们说呢。

 

2.扩展方法跟普通的实例方法又有什么区别?

对于用 C# 编写的代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

 

3.什么样的方法可以作为扩展方法呢?

这种方法,必须具备以下几个特征:

l 它必须在一个非嵌套的,非泛型的静态类中;

l 它至少要有一个参数;

l 第一个参数必须附上this关键字作为前缀;

l 第一个参数不能有其他任何修饰符(如out或ref);

l 第一个参数的类型不能是指针类型。

今天,就讲到这里,下一节,我们将会通过一个实例,来学习扩展方法何时被调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息