C#在构造函数之前执行代码

时间:2011-03-01 13:11:16

标签: c# .net

我想在某个类构造函数执行之前自动执行一些代码(加载一些类需要的externall),所有这些都在C#,.NET 2.0中

编辑:

public class MyClass 
{
    ThisTypeFromExternalAssembly variable;
}

我真正需要的是将程序集加载器以某种方式“附加”到MyClass,以便在需要时加载外部程序集。这必须在构造函数之前发生,但我不想在构造Init()对象之前调用一些MyClass()

4 个答案:

答案 0 :(得分:6)

您可以为该类使用静态初始化程序:

static ClassName( )
{

}

这将在构造任何ClassName实例之前调用。

鉴于你会做的更新:

public class MyClass
{
    ThisTypeFromExternalAssembly variable;

    static MyClass( )
    {
        InitialiseExternalLibrary( );
    }

    public MyClass( )
    {
         variable = new ThisTypeFromExternalAssembly( );
    }
}

答案 1 :(得分:4)

您可以使用static constructor吗?

class SimpleClass
{
    // Static constructor
    static SimpleClass()
    {
        //...
    }
}

来自MSDN文章:

  

使用静态构造函数   初始化任何静态数据,或者   执行需要的特定操作   仅执行一次。它被称为   自动在第一个之前   实例已创建或任何静态   成员被引用。

答案 2 :(得分:3)

如果要加载程序集,听起来你只想做一次,在这种情况下静态构造函数可能是合适的:

public class Foo
{
    static Foo()
    {
        // Load assembly here
    }
}

请注意,如果此操作失败(抛出异常),则AppDomain中的类型将无法使用。

为什么你不仅仅使用普通类型分辨率加载程序集?当您需要使用其中的一部分时,是否不会自动加载程序集?你能提供一些关于你想要解决的问题的更多细节吗?

答案 3 :(得分:0)

您可能希望使用像postharp这样的aop框架,它允许通过使用属性来干扰函数调用。

http://www.sharpcrafters.com/solutions/monitoring#tracing

Postsharp: how does it work?

http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx