C#实现类似jQuery的方法连缀功能
jQuery的方法连缀使用起来非常方便,可以简化语句,让代码变得清晰简洁。那C#的类方法能不能也实现类似的功能呢?基于这样的疑惑,研究了一下jQuery的源代码,发现就是需要方法连缀的函数方法最后返回对象本身即可。既然javascript可以,C#应该也是可以的。
为了验证,编写一个jQPerson类,然后用方法连缀对其ID,Name,Age等属性进行设置,请看下面的代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceCSharpMethodLikeJQuery
{
publicclassjQPerson
{
stringId{set;get;}
stringName{set;get;}
intAge{set;get;}
stringSex{set;get;}
stringInfo{set;get;}
publicjQPerson()
{
}
///<summary>
///设置ID,返回this,即jQPerson实例
///</summary>
///<paramname="Id"></param>
///<returns></returns>
publicjQPersonsetId(stringId)
{
this.Id=Id;
returnthis;
}
///<summary>
///返回this,即jQPerson实例
///</summary>
///<paramname="name"></param>
///<returns></returns>
publicjQPersonsetName(stringname)
{
this.Name=name;
returnthis;
}
///<summary>
///返回this,即jQPerson实例
///</summary>
///<paramname="age"></param>
///<returns></returns>
publicjQPersonsetAge(intage)
{
this.Age=age;
returnthis;
}
///<summary>
///返回this,即jQPerson实例
///</summary>
///<paramname="sex"></param>
///<returns></returns>
publicjQPersonsetSex(stringsex)
{
this.Sex=sex;
returnthis;
}
///<summary>
///返回this,即jQPerson实例
///</summary>
///<paramname="info"></param>
///<returns></returns>
publicjQPersonsetInfo(stringinfo)
{
this.Info=info;
returnthis;
}
///<summary>
///tostring输出键值对信息
///</summary>
///<returns></returns>
publicstringtoString()
{
returnstring.Format("Id:{0},Name:{1},Age:{2},Sex:{3},Info:{4}",this.Id,this.Name,this.Age,this.Sex,this.Info);
}
}
}
然后可以对上面进行测试,看方法连缀是否生效:
///<summary>
///toString的测试
///</summary>
[TestMethod()]
publicvoidtoStringTest()
{
jQPersontarget=newjQPerson();
target.setId("2")
.setName("jack")
.setAge(26)
.setSex("man")
.setInfo("ok");
stringexpected="Id:2,Name:jack,Age:26,Sex:man,Info:ok";
stringactual;
actual=target.toString();
Assert.AreEqual(expected,actual);
//Assert.Inconclusive("验证此测试方法的正确性。");
}
通过以上操作可以看出,方法连缀功能的确使代码变得直观和简洁,增加可阅读性,大家不妨试一试。