继承含泛型的父类

接口部分:

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();
        }
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值