转载

C#实现jQuery的方法连缀

jQuery的方法连缀使用起来非常方便,可以简化语句,让代码变得清晰简洁。那C#的类方法能不能也实现类似的功能呢?基于这样的疑惑,研究了一下jQuery的源代码,发现就是需要方法连缀的函数方法最后返回对象本身即可。既然javascript可以,C#应该也是可以的。

为了验证,编写一个 jQPerson 类,然后用方法连缀对其ID,Name,Age等属性进行设置,请看下面的代码:

1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6   7 namespace CSharpMethodLikeJQuery  8 {  9     public class jQPerson 10     { 11         string Id { set; get; } 12         string Name { set; get; } 13         int Age { set; get; } 14         string Sex { set; get; } 15         string Info { set; get; } 16  17         public jQPerson() 18         { 19  20         } 21         /// <summary> 22         /// 设置ID,返回this,即jQPerson实例 23         /// </summary> 24         /// <param name="Id"></param> 25         /// <returns></returns> 26         public jQPerson setId(string Id) 27         { 28             this.Id = Id; 29             return this; 30         } 31         /// <summary> 32         /// 返回this,即jQPerson实例 33         /// </summary> 34         /// <param name="name"></param> 35         /// <returns></returns> 36         public jQPerson setName(string name) 37         { 38  39             this.Name = name; 40             return this; 41         } 42         /// <summary> 43         /// 返回this,即jQPerson实例 44         /// </summary> 45         /// <param name="age"></param> 46         /// <returns></returns> 47         public jQPerson setAge(int age) 48         { 49  50             this.Age = age; 51             return this; 52         } 53         /// <summary> 54         /// 返回this,即jQPerson实例 55         /// </summary> 56         /// <param name="sex"></param> 57         /// <returns></returns> 58         public jQPerson setSex(string sex) 59         { 60  61             this.Sex = sex; 62             return this; 63         } 64         /// <summary> 65         /// 返回this,即jQPerson实例 66         /// </summary> 67         /// <param name="info"></param> 68         /// <returns></returns> 69         public jQPerson setInfo(string info) 70         { 71  72             this.Info = info; 73             return this; 74         } 75         /// <summary> 76         /// tostring输出键值对信息 77         /// </summary> 78         /// <returns></returns> 79         public string toString() 80         { 81  82             return string.Format("Id:{0},Name:{1},Age:{2},Sex:{3},Info:{4}", this.Id, this.Name, this.Age, this.Sex, this.Info); 83  84  85         } 86  87     } 88 }

然后可以对上面进行测试,看方法连缀是否生效:

1         /// <summary>  2         ///toString 的测试  3         ///</summary>  4         [TestMethod()]  5         public void toStringTest()  6         {  7             jQPerson target = new jQPerson();  8             target.setId("2")  9                   .setName("jack") 10                   .setAge(26) 11                   .setSex("man") 12                   .setInfo("ok"); 13             string expected = "Id:2,Name:jack,Age:26,Sex:man,Info:ok"; 14             string actual; 15             actual = target.toString(); 16             Assert.AreEqual(expected, actual); 17             //Assert.Inconclusive("验证此测试方法的正确性。"); 18         }

可以看到,方法连缀确实可以让代码变得直观和简洁,增加可阅读性。

正文到此结束
Loading...