C#中的扩展方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的扩展方法相关的知识,希望对你有一定的参考价值。

扩展方法

向现有的类型动态添加方法,不需要创建新的派生类型,重新编译或修改原始类型的源代码

扩展方法是一种特殊的静态方法,调用方式和普通实例方法一样



?扩展方法使用例子

  1. public static void PrintString(this String val)
  2.   {
  3.   Console.WriteLine(val);
  4.   }
  1. var a = "aaa";
  2. a.PrintString();
  3. Console.ReadKey();

但通过我们上面的代码,就给string类型"扩展"了一个PrintString方法

(1)先决条件

  <1>扩展方法必须在一个非嵌套、非泛型的静态类中定义

  <2>扩展方法必须是一个静态方法

  <3>扩展方法至少要有一个参数

  <4>第一个参数必须附加this关键字作为前缀

   <5>第一个参数不能有其他修饰符(比如ref或者out)

    <6>第一个参数不能是指针类型

(2)注意事项

  <1>跟前面提到的几个特性一样,扩展方法只会增加编译器的工作,不会影响性能(用继承的方式为一个类型增加特性反而会影响性能)

  <2>如果原来的类中有一个方法,跟你的扩展方法一样(至少用起来是一样),那么你的扩展方法奖不会被调用,编译器也不会提示你

  <3>扩展方法太强大了,会影响架构、模式、可读性等等等等....

自己写的一个例子
  1. public static class father
  2. {
  3. public static int Speak(this int i) {
  4. Console.WriteLine( "this is a test{0}",i);
  5. return i+20;
  6. }
  7. }
  1. int ii = 10;
  2. Console.WriteLine(ii.Speak());
技术分享技术分享
 







以上是关于C#中的扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的 .Any 和 .Count 更有效的是啥(扩展方法)[重复]

最佳实践:C# 扩展方法命名空间和推广扩展方法

C#编程(二十一)----------扩展方法

c#中函数参数中的this(扩展方法)

c#中函数参数中的this(扩展方法)

C# 扩展方法