当前位置: 首页 > news >正文

扩展方法的定义及使用

扩展方法是定义在静态类内部的静态方法,开发人员可以像用实例方法那样来使用扩展方法。根据C#的语法规定,实例方法只能通过建立一个实例对象才能调用,不能通过类名来调用,相反的,静态方法只能通过类名来调用。而扩展方法提供了一个新的机制可以在对象实例上调用静态方法。扩展方法主要用于在不改变现有的类型代码下,扩展现有类型的功能。所扩展的功能只限于当前上下文有效,并不会对原有类型的定义的代码产生变化。

注意:扩展方法类和要扩展的类须具有相同的命名空间。

它的一般声明格式如下:

  public static class 类名

  {

    public static 返回类型 扩展方法名 (this 要扩展的类型 参数名)

    {

      函数体;

    }

  }

通过示例说明:

 

 

class Program
    {
         static  void Main( string[] args)
        {
            Complex com =  new Complex( 10, - 10);
            var real = com.ToDouble(); // 调用扩展方法
            Console.WriteLine( " 复数 "+com.ToValue()+ " 转换为double类型: "+real);
            Console.Read();
        }
    }

     public  static  class Extensions
    {
         ///   <summary>  
        
///   ///  把复数类型转换为double类型(Complex的扩展方法) 
        
///   ///   </summary>  
        
///   ///   <param name="com"> 复数 </param>  
        
///   ///   <returns> 双精度值 </returns>  
         public  static  double ToDouble( this Complex com)
        {
             return com.Real;
        }



         // 把复数转换为字符串类型(Complex的扩展方法)
         ///   </summary>
        
///   ///   <param name="com"> 复数 </param>
        
///   ///   <returns> 字符串值 </returns>
         public  static  string ToValue( this Complex com)
        {
             string str = com.Real.ToString();
             if (com.Imag >  0)
                str +=  " + ";
             if (com.Imag !=  0)
                str += com.Imag +  " i ";
             return str;
        }
    }

     public  class Complex 
    { 
         // 实数 
         protected  double real; 
         public  double Real {  get {  return real; } } 
         // 虚数 
         private  double imag;
         public  double Imag {  get {  return imag; } }
         public Complex( double real,  double imag)
        {
             this.real = real;
             this.imag = imag;
        }
    }

 

相关文章:

  • 用Restful方式调用WCF进行上传下载(转)
  • 飞雪桌面日历注册码
  • 趋势科技:Web2.0网站将成黑客首要攻击目标
  • 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用42
  • CENTOS NTFS支持
  • SSD固态硬盘解析和部署注意事项
  • Visual Studio 2010 中的代码约定设置
  • DevExpress ASPxGridView 使用方法概述
  • SQL2005 数据的导出 bcp 命令
  • .NET正则基础之——正则委托
  • 微“.NET研究”软“重启”Windows Phone 7 设计的经过
  • XML各层对象的方法
  • weblogic 10.3 for redhat 5.5 install
  • SELinux进阶篇 应用目标策略管理非限制进程和用户
  • EM智能会议室预订系统
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Javascript基础之Array数组API
  • k8s如何管理Pod
  • Linux快速复制或删除大量小文件
  • mongodb--安装和初步使用教程
  • node.js
  • rc-form之最单纯情况
  • Swift 中的尾递归和蹦床
  • 彻底搞懂浏览器Event-loop
  • 创建一个Struts2项目maven 方式
  • 高度不固定时垂直居中
  • 官方解决所有 npm 全局安装权限问题
  • 后端_MYSQL
  • 回顾2016
  • 你不可错过的前端面试题(一)
  • 容器服务kubernetes弹性伸缩高级用法
  • 数据库巡检项
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (a /b)*c的值
  • (floyd+补集) poj 3275
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .Net MVC + EF搭建学生管理系统
  • .NET构架之我见
  • .net经典笔试题
  • .skip() 和 .only() 的使用
  • /etc/fstab 只读无法修改的解决办法
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [@Controller]4 详解@ModelAttribute
  • [16/N]论得趣
  • [BUG]Datax写入数据到psql报不能序列化特殊字符