如何在“使用”定义部分中将动态类打开为静态?

时间:2011-05-16 10:50:32

标签: c# .net using mixins

所以我想以这样的方式打开动态类:

using System ...
...
using System.Windows.Forms;
using core = new myNamespace.myClass(); // Sure it doesn't work but how to realize it ?

当我做的时候

使用myNamespace.myClass();我不能使用它,因为myClass是动态的,但我希望它创建,因为这个类创建并与它一起处理。我想要访问myClass的varables /方法,就像这个类一样,比如

core.X必须与X相同。

可能我只想要像Interface这样的东西,但作为一个类。

好的,我会尽力解释我想要的内容:

例如我有部分类,每个有2个文件!和...第二个文件的内容是相同的。如何为所有部分类使用一个文件?像一个模块,但没有前缀!

所以我知道我的英语不完美,我会添加一个代码示例:

public partial class FRIIB : Form
{
  private string x = username;
}

public partial class FRIIB : Form
{
  private string username = "hi";
}

public partial class LOLO : Form
{
  private string x = username;
  // I don't want to create another file with "username" definition 
}

我正在考虑使用Mixin ...它看起来就像我想要的那样。

3 个答案:

答案 0 :(得分:2)

using 声明 需要位于单一方法的上下文/范围内。

如果您不能将范围限制为方法,则需要手动处理它,通常是在对象上实现IDisposable,并在Dispose()中进行处置。有时(但很少)你可能也想要一个终结器来捕捉被收集的未被遮挡的对象 - 但强调:非常罕见。

没有用于处理静态字段的内置机制 - 您必须在干净的app-exit期间添加静态Release()方法(或类似方法)来调用。

还有一个using 别名 ,它看起来有点像你的代码,但做了一些完全不相关的事情(它允许你使用另一个名称)单一类型,为方便起见或避免歧义;它仅限于单个文件。)

答案 1 :(得分:2)

如果我理解你的问题,那么你正在寻找这样的东西:

object obj = Activator.CreateInstance(Assembly.LoadFrom("My Assembly").GetType("myNamespace.myClass", true));
core = obj as myNamespace.myClass;

第一个语句动态创建自定义类型的实例。第二个语句将创建的对象强制转换为自定义类型。

此代码段仅显示正流量,当然,我建议您在代码中注意负流量。

我希望这会有所帮助: - )

答案 2 :(得分:1)