首页 > 编程语言 ># c#中的扩展方法

# c#中的扩展方法

时间:2023-05-27 11:33:31浏览次数:24  
标签:string c# 扩展 static 参数 方法 public

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 > ();
 }

标签:string,c#,扩展,static,参数,方法,public
From: https://blog.51cto.com/u_12828212/6361619

相关文章

  • 群晖Virtual Machine Manager(VMM)安装Windows系统卡顿
    安装Windows系统卡顿,磁盘测速异常的慢 其他人也讨论过这个问题https://www.v2ex.com/t/908671#    ......
  • c#中使用NAudio
    在网上找了很多类似录音教程效果都不好,或根本不能录音,代码由网上借鉴修改(完整实现录音播放功能)NAudioNAudio为.NET平台下的开源库,采用ML-PL协议,开源地址:https://github.com/naudio/NAudio。NAudio功能强大,且其入门容易。强大在于:它支持许多音频操作,可实现多种API播放与录制、多......
  • RoCE多网卡时,报文可以过去,但是回不来
    摘要:虽然网卡是接入RoCE网络,但其实问题本身是单纯路由相关的,所以看的时候,不用关注RoCE,只当做一个独立子网就行了本文分享自华为云社区《<跟唐老师学习云网络>-RoCE多网卡时,报文可以过去,但是回不来》,作者:tsjsdbd。一、网络概要一台机子,接入2个子网,一个普通通信的,一个高速通信的......
  • 关于oracleJdk连接maven产生ssl验证问题
    问题:failedtotransferfromhttps://repo.maven.apache.org/maven2/duringapreviousattempt这是因为oraclejdk1.8存在ssl验证问题添加以下信息到idea的maven当中即可-Dmaven.wagon.http.ssl.insecure=true-Dmaven.wagon.http.ssl.allowall=true-Dmaven.wagon......
  • MapStructPlus 1.2.5 发布,新增 Solon 支持
    MapStructPlus1.2.5发布,更新内容如下:fix:解决MapConvertMapperAdapter编译警告问题feat:增加nullValueMappingStrategy和nullValuePropertyMappingStrategy配置项feat:适配solon主要更新内容为适配Solon,使用方式基本等同于SpringBoot环境下的使用方式。与其......
  • 在Directory.Build.props中用全局变量来管理包的版本号
    1、顶级目录下放置Directory.Build.props文件为每个软件产品,分配一块独立的windows盘符,在根目录下放置名为Directory.Build.props的文件即可。这个文件名是特定的,必须叫这个。如果公司有很多产品,引用的同一个包的版本可能是不同的,那么在磁盘根目录下就不要有Directory.Build.props......
  • Python_手动下载Chrome驱动找不到对应版本,尝试pip自动下载对应版本的驱动,问题解决
    pipinstallwebdriver-manager 验证是否成功代码如下:fromseleniumimportwebdriverdriver=webdriver.Chrome()url='https://www.csdn.net/'driver.get(url)driver.maximize_window()验证成功......
  • 第一个react.js程序:create and show comment
    importReact,{Component}from"react";import{render}from"react-dom";importPropTypesfrom"prop-types";constnode=document.getElementById("root");constdata={post:{id:123,content:......
  • ASP.NET MVC WebAPI Put和Delete请求出现405(Method not allowed)错误
    解决办法:在站点根目录下的web.config设置如下(主要参考添加项):<system.webServer></system.webServer>(End)转自:https://www.bbsmax.com/A/qVdepEM85P/......
  • js原型prototype(实例构造函数的属性) __proto__(实例对象的属性) constructor(实例
    functionPerson(name,age){this.name=namethis.age=age}Person.prototype.sayHi=function(){//原型是公共方法解决构造函数new对象公共属性和方法的内存浪费console.log(this.name+'sayhi!!')}constp1=newPerson('aa',12)constp2=new......