根据类名称的一部分来确定类

问题描述

先简单地描述一下吧。在一个工程里面有若干窗体和若干类,类是按照前缀+任意文字串的规则来决定的,前缀部分不会重复。在程序启动的时候,可以得到一个用户输入的字符串,如果工程内的某个窗体类的名称的前面部分和这个字符串相同的话,就显示这个窗体。现在我写了一段代码来实现查找窗体的功能,可是其中有两行不满意的地方,请问能不能把这两行注释为不满意的代码用一个函数来替换呢?或者不管代码给点其他的解决思路也行。代码如下。(简化了一下,并且删除了错误处理)DimgsAutoOpenFormIDAsString="TF9001"'假设用户想要打开[TF9001小实验]这个窗体DimAutoOpenFormTypeAsType=NothingIfgsAutoOpenFormID<>""ThenForEachtheTypeAsTypeInSystem.Reflection.Assembly.GetExecutingAssembly.GetTypes'不满意IftheType.Name.StartsWith(gsAutoOpenFormID,StringComparison.CurrentCultureIgnoreCase)Then'不满意IftheType.IsSubclassOf(GetType(Form))ThenAutoOpenFormType=theTypeExitForEndIfEndIfNextEndIfIfAutoOpenFormTypeIsNotNothingThenfMainForm=Activator.CreateInstance(AutoOpenFormType)EndIf

解决方案

解决方案二:
在线等待中。。。等到六点。
解决方案三:
用反射,但是运行效率会差一点
解决方案四:
你如果无法知道完整名称,就只能去遍历匹配,还能有什么办法.
解决方案五:
引用2楼xiaobingking的回复:

用反射,但是运行效率会差一点

是啊,现在的代码用的就是反射呢。
解决方案六:
引用3楼Z65443344的回复:

你如果无法知道完整名称,就只能去遍历匹配,还能有什么办法.

是的,不能保证是完整名称。要是能够改成像System.IO.Directory.GetFiles(path,searchPattern)那样,可以利用searchPattern就好了。
解决方案七:
所谓的search不过是已经封装好的,你写的也是个search的也是个,没啥本质区别,需要你把这个封装下然后复用,就是一回事。建议你弄好命名规则然后在用反射,再不行做个映射表,如果窗体就百来个,现在的方法也没啥太大的问题。
解决方案八:
什么是映射表啊,好高端的样子。。。

时间: 2024-11-08 18:21:58

根据类名称的一部分来确定类的相关文章

t4模板 ef-code first 怎么使用T4模板获得一个文件夹下的类名称

问题描述 code first 怎么使用T4模板获得一个文件夹下的类名称 如何获取一个文件夹下的类名称,本来想用反射把类名称发射出来,但是在T4中命名引用了但一直提示没引用 解决方案 什么叫文件夹下的类名称,你说的是命名空间,还是你文件夹下有很多dll,然后你要遍历所有dll中的所有类? 后者需要用Assembly.LoadFrom先加载dll,再用Assembly.GetTypes反射.

[求助]仅当显式请求注释处理时才接受类名称

问题描述 大家好,初学java,遇到这个问题...Win7系统jdk安装路径为:D:ProgramFilesJavajdk1.7.0_04系统变量为:JAVA_HOME=D:ProgramFilesJavajdk1.7.0_04Path=.;%JAVA_HOME%bin;CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar然后输入以下代码:publicclassHello{publicstaticvoidmain(String[

获取JavaScript用户自定义类的类名称的代码_javascript技巧

我们知道,虽然JavaScript是基于对象(object-based)的语言.但是使用其原形(prototype)特性,我们完全可以实现十分sexy的OO编成框架,这个可以看看经典论坛的文章'基本上实现 javascript 的 OOP (0423版)'.     不过虽然我们实现了'类'这种概念,可是JavaScript的脚本系统却仍然是不认账的.我们并没有办法使用脚本系统中的typeof方法获取自定义类的类型,比如'类'JSClass定义如下:  function JSClass()  {

类模板的类名称后面可以跟类型参数!

问题描述 类模板的类名称后面可以跟类型参数! template class class_name{ }; template class class_name{ };这段代码为什么能够编译过去,请问这样写的目的是什么? 解决方案 C++ 类模板与无类型参数类模板参数

我的JAVAC命令运行后不能编译成class文件,并说错误,仅当显示请求注释处理时才接受类名称hello.java

问题描述 我在设置环境变量,在docs中运行java-version,显示java版本信息,网上强人说这表示环境设置已经成功,然后我按照网上教程,在cmd运行E:NOTEPADHELLO.JAVA在E盘目录下穿件文件hello.java.hello.java文件内编码为:/*简单的HelloWorld程序*/publicclassHello{//main方法publicstaticvoidmain(Stringargs[]){System.out.println("HelloWorld!&quo

VC编程控件类HTControl之CHTGDIManager GDI资源管理类用法解析_C 语言

本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下: m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T(".\\pic\\btn_close_normal.png")); #if !defined(_

Python类的定义、继承及类对象使用方法简明教程

  这篇文章主要介绍了Python类的定义.继承及类对象使用方法简明教程,本文用浅显易懂的语言讲解了类的定义.继承及类对象的使用,非常实用易懂,需要的朋友可以参考下 Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的一些特性,如人类有名字.身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭.走路和睡觉等功能.具体的形式如

vbnet-VB.net根据类的名字动态使用某个类

问题描述 VB.net根据类的名字动态使用某个类 我想实现类似于Java中Class.ForName(XXX)这个功能.具体说明如下 我现在有一个变量存放Form的名称,然后我想根据这个变量直接判断该调用哪个Form的ShowDialog方法 如果无法根据名字获取的话,我只能这样写: Select Case vFormName Case ""frm001"" frm001.ShowDialog Case ""frm002""

为什么java源文件中有两个类编译后只产生一个类文件

问题描述 classdemoA{publicstaticvoidmain(String[]args){demoad=newdemoa();d.getmoney();}voidgetmoney(){System.out.println("package123123123");}}classdemoa{voidgetmoney(){System.out.println("package1111");}}为什么java源文件中有两个类编译后只产生一个类文件demoA,且运