c#中的扩展方法

扩展声明

扩展方法它可以让我们在不修改原始类的情况下,为其添加新的方法。

并不是任何方法都能作为扩展方法使用 , 必须具有以下特征:
它必须在一个非嵌套的、非泛型的静态类中(所以必须是一个静态方法)

至少要有一个参数;

  • 第一个参数必须是要扩展的类型,使用this关键字进行标记
  • 第一个参数不能有其他任何修饰符(比如out或ref);
  • 第一个参数的类型不能是指针类型。

注意事项

注意的地方:

  1. 扩展方法不能和调用的方法放到同一个类中
  2. 第一个参数必须要,并且必须是this,这是扩展方法的标识,可以在后面追加参数。
  3. 最好保证扩展方法和调用方法在同一个命名空间下

实例1

给string 类型增加一个Add方法,该方法的作用是给字符串增加一个字母a

       //必须是静态类才可以添加扩展方法
       Static class Program
       {
        static void Main(string[] args)
        {
            string str = "quzijing";
            //注意调用扩展方法,必须用对象来调用 
            string Newstr = str.Add();
            Console.WriteLine(Newstr);
            Console.ReadKey();
        }
        //声明扩展方法
        //扩展方法必须是静态的,Add有三个参数
        //this 必须有,string表示我要扩展的类型,stringName表示对象名
        //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,//再增加一个变量即可

        public static  string  Add(this string stringName)
        {
            return stringName+"a";
        }
}

实例2

使用对象的扩展方法

 public class Person
 {
   public string Name
   {
     set;
     get;
   }
   public int Age
   {
     set;
     get;
   }
 }
//必须是静态类才可以添加扩展方法
//Person的扩展方法,根据年龄判断是否是成年人
public static bool GetBIsChild(this Person oPerson)
{
  if(oPerson.Age >= 18) return false;
  else return true;
}

Main方法里面调用:

var oPerson1 = new Person();
oPerson1.Age = 20;
var bIsChild = oPerson1.GetBIsChild();        

实例3

泛型对象的扩展

public static class DataContractExtensions
{
  //必须是静态类才可以添加扩展方法
  //测试方法
  public static T Test < T > (this T instance) where T: Test2
  {
    T Res =
      default(T);
    try
    {
      Res.AttrTest = instance.AttrTest.Substring(0, 2);
      //其他复杂逻辑...
    }
    catch
    {}
    return Res;
  }
}
public class Test2
{  
  public string AttrTest
  {
    set;
    get;
  }
}

实例4

集合扩展方法

 public static void ShowItems < T > (this IEnumerable < T > _al)
 {
   foreach(var item in _al)
   {
     Console.WriteLine(item);
   }
 }
 static void Main(string[] args)
 {
   //调用集合的扩展方法
   str.ShowItems < char > ();
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#扩展方法是一种特殊的静态方法,它允许您向现有的类型添加新的方法,而无需修改原始类型的定义。通过扩展方法,您可以在不创建新的派生类型或重新编译代码的情况下,为现有类型添加功能。 扩展方法的定义方式如下: ```csharp public static class ExtensionClass { public static ReturnType ExtensionMethod(this ExtendedType instance, parameters) { // 扩展方法的实现 } } ``` 其,`ExtensionClass`是包含扩展方法的静态类,`ExtensionMethod`是扩展方法的名称,`ExtendedType`是要扩展的类型,`instance`是该类型的实例,`parameters`是方法的参数,`ReturnType`是方法的返回类型。 通过扩展方法,您可以像调用实例方法一样调用它们,而无需创建该类型的实例。例如,假设您想为字符串类型添加一个方法来反转字符串,可以使用扩展方法实现如下: ```csharp public static class StringExtensions { public static string Reverse(this string str) { char[] charArray = str.ToCharArray(); Array.Reverse(charArray); return new string(charArray); } } ``` 然后,您可以在代码使用该扩展方法: ```csharp string myString = "Hello World"; string reversedString = myString.Reverse(); // 调用扩展方法 Console.WriteLine(reversedString); // 输出:dlroW olleH ``` 扩展方法C#非常有用,可以提高代码的可读性和灵活性,同时避免了修改原始类型的定义。它们经常用于扩展.NET框架的基本类型,也可以用于自定义类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值