继承含泛型的父类

来源:互联网 发布:新店淘宝客 编辑:程序博客网 时间:2024/04/28 09:36

接口部分:

public interface ITestCluster{    string Text    {        get;        set;    }    void SetupScripts();}

public interface ILogic{    ITestCluster TestCluster    {        get;        set;    }    void Logic();    Type TestClusterType    {        get;    }}

基本类型:

public class TestClusterBase : ITestCluster{    public string Text    {        get;        set;    }    public void SetupScripts()    {         }}

泛型父类:

public class LogicBase<T> : ILogic where T : TestClusterBase{    public LogicBase()    {    }    public virtual void Logic()    {        MessageBox.Show(this.TestCluster.Text);    }    internal ITestCluster TestCluster    {        get;        set;    }    internal Type TestClusterType    {        get { return typeof(T); }    }    public T TestClusterT    {        get         {            return this.TestCluster as T;        }    }}

子类

public class TestClusterEmpty : TestClusterBase{    public string Extend    {        get;        set;    }}

public class TestClusterPower : TestClusterBase{    public string PowerExtend    {        get;        set;    }}


子类1:

public class LogicEmpty : LogicBase<TestClusterEmpty>{    public LogicEmpty()    {    }    public override void Logic()    {        MessageBox.Show(string.Format("TestCluster:{0} Extend:{1}", this.TestCluster.Text, this.TestClusterT.Extend));    }  }

子类2:

public class LogicPower : LogicBase<TestClusterPower>{    public LogicPower()    {    }    public override void Logic()    {        MessageBox.Show(string.Format("Type:{2} TestCluster:{0} PowerExtend:{1}",             this.TestCluster.Text,             this.TestClusterT.PowerExtend,            this.GetType().FullName));    }}

Demo:

private void button1_Click(object sender, EventArgs e){    var testClusterEmpty = new TestClusterEmpty()    {        Text = "testCluster Empty ",        Extend = "Extend AAA"    };    var testClusterPower = new TestClusterPower()    {        Text = "testCluster Power ",        PowerExtend = "PowerExtend BBB"    };    Type[] types = new Type[] { typeof(LogicEmpty), typeof(LogicPower) };    Assembly assembly = Assembly.GetExecutingAssembly();    foreach (var t in types)    {        var x = t.GetInterface(typeof(ILogic).FullName);        if (x != null)        {            ILogic obj1 = (ILogic)assembly.CreateInstance(t.FullName);            if (obj1.TestClusterType == typeof(TestClusterEmpty))            {                obj1.TestCluster = testClusterEmpty;            }            else            {                obj1.TestCluster = testClusterPower;            }            obj1.Logic();        }    }}