深入理解C# 3.0的五项主要改进 (extension方法)
2007-07-24 20:44
246 查看
2.extension方法
在C#中,您不能继承和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法允许您扩充任何类,甚至是标记为封装的类。例如,如果希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。
列表A
namespaceMyExtensionMethods
{
public static class Extension
{
public static void NoSpaces(this string data)
{
return data.Replace(" ", "");
}
}
}
在一个类中导入这个extension方法时,开发者就能够对这个类包含的任何字符串调用NoSapces()方法。
extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;如果extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。
要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)
列表B
usingMyExtensionMethods;
namespace MyNamespace
{
public class MyClass
{
public MyClass()
{
string data = "this is my data";
//nospaces will contain "thisismydata".
string nospaces = data.NoSpaces();
}
}
}
注意extension方法的优先度比instance方法低。因此如果instance方法和extension方法有同样的签名,则应执行instance方法。
在C#中,您不能继承和扩充用访问标识符标记为“封装”的类型。但在C# 3.0中,extension方法允许您扩充任何类,甚至是标记为封装的类。例如,如果希望添加一个NoSpaces()方法到字符串类中,我们要定义一个类似列表A中的extension方法。
列表A
namespaceMyExtensionMethods
{
public static class Extension
{
public static void NoSpaces(this string data)
{
return data.Replace(" ", "");
}
}
}
在一个类中导入这个extension方法时,开发者就能够对这个类包含的任何字符串调用NoSapces()方法。
extension方法的第一个参数决定extension方法的有效类型。在这种情况下,“这个字符串数据”(this string data)表明extension方法适用于字符串类;如果extension方法以“这个对象数据”(this object data)为第一个参数,则说明这个方法对每个对象有效。
要表明您希望导入extension方法,只需在它们的命名空间中包括一个using指令。例如,要应用上面说明的方法,需要在类文件中包括一个using MyExtensionMethods指令:(列表B)
列表B
usingMyExtensionMethods;
namespace MyNamespace
{
public class MyClass
{
public MyClass()
{
string data = "this is my data";
//nospaces will contain "thisismydata".
string nospaces = data.NoSpaces();
}
}
}
注意extension方法的优先度比instance方法低。因此如果instance方法和extension方法有同样的签名,则应执行instance方法。
相关文章推荐
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进_C#教程
- 深入理解C# 3.0的五项主要改进
- 【转载】深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进
- 深入理解C# 3.0的五项主要改进(隐型局部变量)
- 深入理解C# 3.0的五项主要改进 (对象初始化器)
- 深入理解C# 3.0的五项主要改进_C#教程
- 深入理解C# 3.0的五项主要改进 (LINQ)
- 深入理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0的五项主要改进
- 理解C# 3.0新特性之Extension方法浅议
- 理解C# 3.0新特性之Extension方法浅议
- 理解C# 3.0新特性之Extension方法浅议开发者在线 Builder.com.cn 更新时间:2008-07-19作者: 来源: