C#中如何获得指定命名空间中所有自定义类的信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何获得指定命名空间中所有自定义类的信息相关的知识,希望对你有一定的参考价值。

C#中如何获得指定命名空间中所有自定义类的信息哪怕得到命名空间中 所有 类的名字也行

访问自定义类,同个命名空间下,class前要加上访问控制修饰符如 public(公共访问),private(私有访问),
如:namespace myclass

public class x


命名空间b访问时,就这样
using myclass
namespace bb

public class y
public string m()

//实例化自定义类
myclass ms=new myclass();


参考技术A 基本思路就是反射。但这个不是很好实现,因为反射是基于程序集的,需要一个DLL或EXE作为入口。建议把这个命名空间(如:YourLibrary.YourNamespace)放到一个程序集(类库)中,如:YourLibrary。然后用外部的程序集以反射的方式加载这个程序集,再调用GetTypes()来获取该程序集下的所有类。比如在YourLibrary.YourNamespace下有A,B,C三个类,现在在Test程序集(如:控制台程序)中遍历这三个类:
using System.Reflection;
namespace Test

public class Program

public static void Main(string[] args)

foreach(Type t in Assembly.Load("YourLibrary").GetTypes())

//你对这些类信息的操作
//e.g:
//Console.Write(t.FullName);



Qt Creator - UI 类的自定义命名空间

【中文标题】Qt Creator - UI 类的自定义命名空间【英文标题】:Qt Creator - custom namespace for UI classes 【发布时间】:2013-06-18 08:13:11 【问题描述】:

我想在自己的命名空间中拥有一个 UI 类,例如 ProjectName::MainWindow。请问有什么方便的方法可以在 Qt Creator 中实现这一点吗?

我可以打开 mainwindow.ui 文件并将“MainWindow”更改为“ProjectName::MainWindow”,这样可以编译并运行。但是当我在 UI 设计器中更改某些内容时,会再次生成 ui 文件......使用错误的类名。

【问题讨论】:

你是在说你自己的表单类(默认在默认命名空间,它的源在项目中)还是Qt生成的UI类(默认在Ui命名空间和它的声明存储在 Qt 生成的ui_ClassName.h 文件中)? 我自己的。但是生成的类也应该在propper命名空间中。 Id est:我自己的 ProjectName::MainWindow 和生成的 ProjectName::Ui。 【参考方案1】:

当您创建新的设计器表单类时,请使用命名空间指定类名,例如ProjectName::MainWindow。 Qt Creator 会自动生成如下代码。

MainWindow.h:

namespace ProjectName 
  namespace Ui 
    class MainWindow;
  
  class MainWindow : public QWidget 
    Q_OBJECT    
  public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();    
  private:
    Ui::MainWindow *ui;
  ;
 // namespace ProjectName

MainWindow.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>ProjectName::MainWindow</class>
 <widget class="QWidget" name="ProjectName::MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
 </widget>
 <resources/>
 <connections/>
</ui>

如您所见,MainWindowUi::MainWindow 现在都在 ProjectName 命名空间中。

【讨论】:

此外,您甚至不需要编辑 XML 文档。您可以简单地在 QtDesigner 中编辑 name 属性 答案中的技巧(Qt creator 2.7.0)仅在添加类时有效,而不是在创建项目时有效 - 向导抱怨类名中的无效字符。这让我很困惑……在 QtDesigner 中编辑属性也可以。非常感谢!

以上是关于C#中如何获得指定命名空间中所有自定义类的信息的主要内容,如果未能解决你的问题,请参考以下文章

Roslyn 如何获得一个类的引用

C#通过反射获取不同命名空间下的类(属性和方法)

C# Winform自定义控件加载到主窗体中之后,自定控件上面的空间 怎么和主窗体上其他控件交互?

Qt Creator - UI 类的自定义命名空间

在C#中获取命名空间中的类列表[重复]

C# - 在共享命名空间中跨文件使用命名空间