下面这个例子我为string这个类拓展了一个MegerString的方法。
public static class ThisDemo{
//定义一个合并字符串的方法
public static string MegerString(this string str1, string str2)
{
return str1 + str2;
}
}
public class TestDemo{
public void Test()
{
string str1 = "str1";
string str2 = "str2";
string str3 = str1.MegerString(str2);//string对象可以直接调用到这个方法。
Console.Write(str3);
}
}
以上是关于this拓展类方法的简单应用,下面利用这个一特性,在C#里模拟类的多继承。
我们都知道C#里类是单继承,接口是多继承的。那么在C#里怎么实现类的多继承了,
下面的例子就实现了如何在C#里模拟类的多继承。
#region=======C#中实现多继承=========
//C#中实现多继承
/// <summary>
/// 定义一个飞的接口
/// </summary>
public interface IFly
{
}
/// <summary>
/// 定义一个拓展类来为接口添加方法,继承该接口的类就能拥有这个方法,如何:IFly
/// </summary>
public static class ExtendClass
{
public static void Fly<T>(this T childrenClass)where T:IFly
{
Console.Write("我会飞了");
}
}
/// <summary>
/// 鸟类继承IFly接口,并且继承的Fly方法
/// </summary>
public class Bird:IFly
{
public void TigerFly()
{
this.Fly();
}
}
#endregion===============
上面的例子中鸟类继承了IFly接口,而且同时拥有了Fly()方法,所以这里就是通过接口+This拓展方法的形式模拟了类的多继承。
这样当后期维护时当需求出现变更,继承与抽象类的所有子类都统一需要实现某一个方法时就可以使用这种方式来实现。
有些人会问:为什么不直接在原有的抽象类的基础上加上要实现的方法,可是这样做就违背了对修改关闭对拓展开发的原则。
我们应该尽量的不去改动以前的代码逻辑而去实现新的功能。这样才符合设计模式的开闭原则。