我在MS文档中发现了矛盾,它说你可以扩展它,但在很多stackoverflow线程中我发现你无法扩展它,因为它是静态类。 VS 社区也不让我编译我的代码,因为 File 是静态类型,不能用作参数。
请从文档中向我解释这部分:
其他示例可能是向 System.String 类添加通用功能,扩展 System.IO.File 和 System.IO.Stream 对象的数据处理功能,以及用于特定错误处理功能的 System.Exception 对象。这些类型的用例仅受您的想象力和良好判断力的限制。
我的测试代码:
public static string ExtendFileClass(this File value)
{
return value.ToString();
}
文档中没有错误,您应该在整个上下文中阅读该部分:
但是我们可以扩展 System.Data.SqlClient.SqlConnection 类使用扩展方法从我们的任何地方执行该查询 有到 SQL Server 的连接。其他示例可能是添加 System.String 类的通用功能,扩展数据 处理[...]
所以这部分的重点是解释你可以使用扩展方法来扩展
System.String
类,如下所示:
public static class StringExtensions
{
public static string MyCustomStringMethod(this String self)
{
return self + "anything";
}
}
然后你可以在你的类(我的示例中的
StringExtensions
)可用的任何地方使用此方法:
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World".MyCustomStringMethod());
}
}
编辑:这里不要关注
System.String
,重点是你可以使用扩展方法“扩展”任何类型,无论是否密封。在文档的上下文中,继承是一种可扩展性,扩展方法是另一种,您也可以使用它。这是两种可扩展性,好的一种取决于具体情况(如文档中所解释的)。