gpt4 book ai didi

c# - 是否可以仅通过代码在 Visual Studio 2012 的解决方案资源管理器中执行 "right-click, add, new-item"过程?

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:59 24 4
gpt4 key购买 nike

我创建了一个向导,用于显示仅使用代码生成的表单。这种形式允许用户浏览一些数据库和数据集,以选择一些数据结束。一旦他们完成了这些并且一些变量已经分配/更改,表单应该只向他们显示一个“确定”按钮。到目前为止,我已经完成了所有这些。

我的问题是,单击该按钮后,我想将我创建的自定义类对象/实体添加到当前解决方案中。我不知道(也找不到任何有用的东西)如何通过代码添加新的自定义类、命名空间和所有内容。

如果有人对此有任何指示或经验,将不胜感激!

最佳答案

这项技术称为 metaprogramming .有一本名为"Metaprogramming in .NET"的好书向您展示如何使用很酷的功能。

因此,出于元编程目的,.NET 提供:

  1. Reflection - 用于查找有关类的信息,以访问私有(private)/ protected /内部字段和属性等。代码项目的另一个概述:link
  2. Reflection.Emit - 提供在运行时创建新类型的能力。
  3. Expression trees - 用于存储代码作为数据。它允许您以丑陋的语法(不像 IL 代码那么丑陋)生成方法,编译它们并从编译的 lambda 函数中获取 IL 代码。
  4. CodeDom - 提供模板化代码生成和动态编译。
  5. 文本模板转换工具包又名 T4 - 在编译时元编程之前。
  6. 二进制编织 - 编译时元编程之后。好像FodyPostSharp . 不是你的情况,只是为了概述
  7. 特殊功能:.NET 有一个名为 "Dynamic Language Runtime" 的部分为 .NET 提供动态类型语言的功能。有 ExpandoObject使您能够定义未定义属性的类

那么,这是对 .NET 元编程功能的简短概述。现在,关于你的情况。如果你想在你的解决方案代码中添加新类,真的是在文件系统中的代码中,那么你可以自由选择什么,你甚至可以像文本一样编写代码。

但是如果你想在运行时应用程序中添加新类,首先你必须确定为什么需要添加新类,你将如何使用它?

所以,主要思想:首先描述类,然后将其添加到运行时。现在你有丑陋的语法来创建这个类的对象。它可以是 Activator.CreateInstance(yourRuntimeTypeInfo)yourRuntimeTypeInfo.GetConstructor(...).Invoke(...)。接下来是什么?你在编译时从这个创建方法中得到的只是一个对象。您必须使用反射,找到方法,调用它:yourRuntimeTypeInfo.GetMethod(...).Invoke(...)。或者您可以使用表达式树生成方法信息,确定所有数据库类的基本类;并以某种方式在基本类中使用生成的方法。或者有办法。不增加新的类型,只用ExpandoObject(或者ElasticObject),把他的方法描述成lambdas;在那之后,所有只是调用方法。或者你甚至可以只使用字典。或者您可以多考虑​​一下,找到无需元编程的解决方案。

关于c# - 是否可以仅通过代码在 Visual Studio 2012 的解决方案资源管理器中执行 "right-click, add, new-item"过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com