接口部分:
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();
}
}
}