.net3.0中的扩展方法(示例)

先定义一个类Utils,在该类中定义了一个string类的扩展方法_IsNull 

using System;

namespace LinqDemo.App_Code
{
    public static class Utils
    {
        /**//// <summary>
        /// 传统写法
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static bool IsNull(string s) 
        {
            return string.IsNullOrEmpty(s);
        }

        /**//// <summary>
        /// 定义string类的一个扩展方法(注意方法签名中的this关键字,且必须定义在静态类中)
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static bool _IsNull(this string s) 
        {
            return string.IsNullOrEmpty(s);
        }
    }
}

接下来使用这个扩展方法

using System;
using LinqDemo.App_Code;//这里只要引用扩展方法所在类的命名空间即可

namespace LinqDemo
{

    class Program
    {
        static void Main(string[] args)
        {              
            string s = "";         
            
            //这里可以看到_IsNull已经变成string类的一个扩展方法了,vs2008 IDE环境也可以自动感知此方法
            Console.WriteLine(s._IsNull());//string类的扩展方法(这个有点类似javascript的prototype)        
            Console.WriteLine("------------------");

            Console.WriteLine(Utils._IsNull(s));//扩展方法也可以这样当作常规方法来调用
            Console.WriteLine("------------------");
            Console.WriteLine(Utils.IsNull(s));//当然这样的传统写法也是可以的
            Console.ReadLine();
        }      
       
    }
}

小记:.net3.0中的扩展方法在使用效果上看,几乎与javascript中的prototype如出一辙,javascript中如果在String的prototype原型上定义了某个方法,会使所有String的实例都能直接使用该方法,参看以下js代码

<script type="text/javascript">
String.prototype._IsNull = function()
{
    return (this==""||this==null||this=="undefined");
}

var s="";
document.write(s._IsNull())
</script>

时间: 2025-01-30 06:45:27

.net3.0中的扩展方法(示例)的相关文章

C#3.0 中使用扩展方法来扩展接口

有关扩展方法的一些知识点请参看我的前篇博客:C#3.0 中的扩展方法 (Extension Methods)前篇博客中我重点介绍了两个特殊场景:1.扩展方法跟原来类的方法重名时候的处理逻辑2.扩展方法的嵌套现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口 应用场景举例:我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数.有了扩展方法后,我们在这种情况下又多了一种实现的选择.下面以代码来说明这个问题:namespace Hongjun.Guo{interfac

说说NET3.5中的扩展方法

扩展方法配合Lambda表示达,可以方便我们进行数据的查询,看个代码吧: IEnumerable<string> x=new List<string> {"1","zzl","good"}; //为对象赋值 foreach (var info in x.ForUser("zzl")) //从其中筛选zzl这个字符 { Response.Write(info); }   public static cla

.Net3.0中的自动属性(示例)

using System;namespace LinqDemo{    class Program    {        static void Main(string[] args)        {            //传统用法示例            Employee Emp = new Employee("Jimmy.Yang", 25);            Console.WriteLine(Emp.ToString());            Console

.Net 2.0中使用扩展方法

大家都知道扩展方法是不能直接在2.0中使用的需要引用一个‍System.Core的dll不过现在有更加简单的方法了只要在工程项目中加入以下代码就OK啦‍namespace System.Runtime.CompilerServices{    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]    public sealed class ExtensionA

objective-C中的扩展方法与partial class

 在c#中要扩展一个现有类很容易,比如这样: public static class Utils { public static void PrintToConsole(this string strSrc) { Console.WriteLine(strSrc); } } 这样就为String类添加了一个PrintToConsole的方法,使用方法如下: class MainClass { public static void Main (string[] args) { "Hello Wor

C#中使用扩展方法对调用进行验证

利用C# 3.0提供的扩展方法技术,可以为已经编译好的程序集类型增加新的方法,从而应对新的扩展.除了在可扩展性方面所具有的优势之外,如果能够合理地结合泛型与类型推断,扩展方法还可以有效降低代码的重复,提高程序的可重用性.例如,这样的方法实现: public class CustomerDAL { public IEnumerable<Customer> FindCustomers(string roleName) { return from customer in context.Custom

C# 3.0 新特性----扩展方法

转自 http://www.cnblogs.com/jiejie_peng/archive/2010/04/08/1707195.html C# 3.0 新特性----扩展方法 主要目的掌握对一个已经编译的类的方法的扩展 特别注意a. 扩展某个类时,新建的类要使用 public static 修饰,因为默认的类是 internal 访问修饰符b. 这个类要有文件作用域,即不能作为嵌套类使用c. 扩展方法要声明为静态的d. 扩展方法的第一个参数类型即是要扩展的类,且该参数前要加 this 关键字e

asp.net中 C#扩展方法实例

这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码. 先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能. 以往我们可能是这样做的,会专门写一个方法做过转换 public static int StrToInt(string s) {     int id;     int.TryParse(s, out id);//这里当转换失败时返回的id为0  

asp.net中CSharpThinking 扩展方法

本章主要描述扩展方法的应用及相关原理. 一, 演变 1.1 扩展方法特征 1)必须在一个静态方法中. 2)至少有一个参数. 3)第一个参数必须附加this关键字作为前缀. 4)第一个参数不能有其他任何修饰符(如 out,ref). 5)第一个参数的类型不能是指针. 6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题. 1.2 扩展方法与普通静态方法的比较   C#2 时对一个类进行扩展而又不能应用继承方式时,只能编