zoukankan      html  css  js  c++  java
  • C# 扩展

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”
    
    这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。
    
     
    
    /// 扩展方法
    /// 1.0 扩展方法的第一个参数表示的是扩展的类型 要加上this开头
    /// 2.0 扩展方法本身是一个静态方法
    /// 3.0 扩展方法必须放在静态类中
    /// 4.0 扩展方法可以和实例方法构成方法重载,但是实力方法的调用优先级高于扩展方法
    /// 5.0 定义在父类的扩展方法可以被子类使用
     
    下列是扩展方法:
    public static string FmtDateTime(this DateTime now)
    {
    return now.ToString("yyyy-MM-dd");
    }
    
    /// <summary>
    /// 扩展的
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string ToLower(this string str,string s)
    {
    return str.ToLower() + "来自扩展"+s;
    }
    
    public static string GetPigName(this Pig pig)
    {
    return pig.Name + "来自扩展";
    }
    
    public static void Say(this Pig pig)
    {
    Console.WriteLine(pig.ToString());
    }
     
    那么,可以这样使用扩展方法:
     
    #region 7.0 扩展方法
    static void c07ExMethod()
    {
    DateTime time = DateTime.Now;
    
    ////在类中调用静态方法
    //Console.WriteLine(ExtMethodHelper.FmtDateTime(time));
    
    //扩张方法,语法糖(是给VS编译器用的,属于编译器语法,不属于C#语法)
    //本质上还是通过ExtMethodHelper.FmtDateTime()方法
    Console.WriteLine(time.FmtDateTime());
    
    
    //2.0 字符串的小写扩展方法与字符串本身的实例方法的优先级
    string str = "AB";
    Console.WriteLine(str.ToLower("扩展"));
    
    
    //3.0 扩展方法扩展子类,子类一样可以使用
    smallPig sm = new smallPig() { Name = "小猪继承自老猪" };
    Console.WriteLine(sm.GetPigName());
    
    }
    #endregion
     
  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/miaoying/p/5443840.html
Copyright © 2011-2022 走看看