C#关于typeof()转为类的时候调用公共方法的实现方式

weixin_37918408 2017-09-13 04:05:49
例如有A,B,C这三个类,他们同时实现了接口ITest的SayHello()方法;
此时在主窗体中通过combox控件获得A,B,C其中一个类的名字,
现在想用typeof方法获得类
var t= Type.GetType(cbx_CarTestType.SelectedItem.ToString());

那么如何让t显示出接口的实现方法呢。
即t.SayHello()的调用
...全文
441 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无情时尚 2017-09-13
  • 打赏
  • 举报
回复
这种方式可以不用工厂模式,实现一个计算器,加、减、乘、除、平方、开方等
无情时尚 2017-09-13
  • 打赏
  • 举报
回复



直接上代码:
using System;
using System.Windows.Forms;

namespace TestClassForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

T InstanceClass<T>(string fullName)
{
return (T) Activator.CreateInstance(Type.GetType(fullName));
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//实例化一个类名为comboBox选择时的属性值的类
//TestClassForm. 是程序的命名空间后跟一个点
IBaseClass say = InstanceClass<IBaseClass>("TestClassForm." + comboBox1.SelectedItem.ToString().Trim());

say.SayHello();
}
}

public abstract class IBaseClass
{
public abstract void SayHello();
}

public class A : IBaseClass
{
public override void SayHello()
{
MessageBox.Show("我是类A");
}
}

public class B : IBaseClass
{
public override void SayHello()
{
MessageBox.Show("我是类B");
}
}

public class C : IBaseClass
{
public override void SayHello()
{
MessageBox.Show("我是类C");
}
}
}

巴士上的邂逅 2017-09-13
  • 打赏
  • 举报
回复
如果不止ABC三个类,或者不止要调用这个一个方法,可以考虑一下MEF
bloodish 2017-09-13
  • 打赏
  • 举报
回复
根据你的描述,需要先实例化一个t类型的对象,才可以哦.

var t=  Type.GetType(cbx_CarTestType.SelectedItem.ToString());
(Activator.CreateInstance(t) as ITest)?.SayHello();

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧