最近在由于项目需要所以重写了很多基本控件,然后问题来了,由于这些控件都要需要用到一个通用的实体去设置许许多多的属性,而我们又没法重写类似Button这样的超类,所以正常来说的话,我们需要在每一个控件子类中复制相同的很多很多个方法,虽然也可以实现,但是这个就一点逼格都没有了,所以上了stackoverflow去找方法,有点乱,也有很多不符合项目的需要,所以总结了一下方法,接下来看下怎么实现
其实要是在C++里,有个概念叫做多继承就可以直接实现这个方法了,然后我们用的是.net,这句好像说的是废话,跟怎么实现没关系。首先,我们需要创建一个空接口
public interface IControl
{
}
然后在相同的命名空间下在创建一个静态扩展类,并实现这个空接口
public static class IControlAddtion
{
public static void SetWidth<T>(this T inControl, int width) where T : IControl
{
(inControl as Control).Width = width;
}
public static void SetHeight<T>(this T inControl, int height) where T : IControl
{
(inControl as Control).Height = height;
}
}
然后每个子类都继承这个接口就搞定了,实现的效果有点类似多继承,但是主要是利用了静态类的特性,接下来看看怎么用
Icontrol control = new MyCustomButton()
control.SetWidth(0);
这里需要用简单工厂模式封装一下,然后就可以完美地利用这个特性了
----要是每样东西都有恢复出厂设置按钮就好了