Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何发出代码,通过调用类的静态字段'来为其赋值/引用;谁的构造函数?_C#_.net_Vb.net_Cil_Reflection.emit - Fatal编程技术网

C# 如何发出代码,通过调用类的静态字段'来为其赋值/引用;谁的构造函数?

C# 如何发出代码,通过调用类的静态字段'来为其赋值/引用;谁的构造函数?,c#,.net,vb.net,cil,reflection.emit,C#,.net,Vb.net,Cil,Reflection.emit,(我的代码有点像C#和VB.NET) 我正在尝试发出如下所示的类: public class SWTTFields { private string fieldName; private int startPosition; private int endPosition; public static readonly SWTTFields ISO = new SWTTFields("ISO", 1, 2); public static readonly

(我的代码有点像C#和VB.NET) 我正在尝试发出如下所示的类:

public class SWTTFields
{
    private string fieldName;
    private int startPosition;
    private int endPosition;

    public static readonly SWTTFields ISO = new SWTTFields("ISO", 1, 2);
    public static readonly SWTTFields EPC = new SWTTFields("EPC", 3, 4);

    private SWTTFields(String fieldName, Int32 startPositon, Int32 endPositon)
    {
        this.fieldName = fieldName;
        this.startPosition = startPositon;
        this.endPosition = endPositon;
    }
}
但是,我不希望将引用分配给两个静态成员。 到目前为止,我明白了这一点(下面的代码在VB.NET中,但是我很乐意接受VB.NET或C#中的答案):


我自己没有使用过
TypeBuilder
,所以这更像是一个提示,而不是完整的代码,但基本上我相信您需要,并在其中执行任务

换句话说,就其静态成员而言,将类想象成这样:

public class SWTTFields
{
    public static readonly SWTTFields ISO;
    public static readonly SWTTFields EPC;

    static SWTTFields()
    {
        ISO = new SWTTFields("ISO", 1, 2);
        EPC = new SWTTFields("EPC", 3, 4);
    }
}
(由于静态构造函数的不同,这与原始代码并不完全相同,但已经足够接近了。)


看起来您已经知道如何为该类型初始值设定项主体生成相关的IL,只需像对待任何其他方法/构造函数主体一样对待它。

我自己没有使用过
TypeBuilder
,因此这与其说是完整的代码,不如说是一个提示,但基本上我相信您需要,并在其中执行赋值

换句话说,就其静态成员而言,将类想象成这样:

public class SWTTFields
{
    public static readonly SWTTFields ISO;
    public static readonly SWTTFields EPC;

    static SWTTFields()
    {
        ISO = new SWTTFields("ISO", 1, 2);
        EPC = new SWTTFields("EPC", 3, 4);
    }
}
(由于静态构造函数的不同,这与原始代码并不完全相同,但已经足够接近了。)


看起来您已经知道如何为该类型初始值设定项主体生成相关的IL,只需像对待任何其他方法/构造函数主体一样对待它。

我自己没有使用过
TypeBuilder
,因此这与其说是完整的代码,不如说是一个提示,但基本上我相信您需要,并在其中执行赋值

换句话说,就其静态成员而言,将类想象成这样:

public class SWTTFields
{
    public static readonly SWTTFields ISO;
    public static readonly SWTTFields EPC;

    static SWTTFields()
    {
        ISO = new SWTTFields("ISO", 1, 2);
        EPC = new SWTTFields("EPC", 3, 4);
    }
}
(由于静态构造函数的不同,这与原始代码并不完全相同,但已经足够接近了。)


看起来您已经知道如何为该类型初始值设定项主体生成相关的IL,只需像对待任何其他方法/构造函数主体一样对待它。

我自己没有使用过
TypeBuilder
,因此这与其说是完整的代码,不如说是一个提示,但基本上我相信您需要,并在其中执行赋值

换句话说,就其静态成员而言,将类想象成这样:

public class SWTTFields
{
    public static readonly SWTTFields ISO;
    public static readonly SWTTFields EPC;

    static SWTTFields()
    {
        ISO = new SWTTFields("ISO", 1, 2);
        EPC = new SWTTFields("EPC", 3, 4);
    }
}
(由于静态构造函数的不同,这与原始代码并不完全相同,但已经足够接近了。)


看起来您已经知道如何为该类型初始值设定项主体生成相关的IL-只需像对待任何其他方法/构造函数主体一样对待它。

请原谅我的无知,但是我看不出
TypeBuilder.definetype初始值设定项
TypeBuilder.DefineConstructor
?@newprint:
definetype初始值设定项
如何创建静态构造函数<代码>定义构造函数创建实例构造函数。@John Skeet谢谢。命名有点混乱
TypeBuilder.DefineStaticConstructor
听起来会更好。@newprint:嗯,它实际上是一个类型初始值设定项-“静态构造函数”是C#术语,而不是CLR术语。根据类是否具有
beforefieldinit
标志,它将根据您的原始代码充当类型初始值设定项,或者根据我的答案中的代码充当静态构造函数。虽然有细微的区别,但这个名字在上下文中是有意义的,我想请原谅我的无知,但我不明白
TypeBuilder.DefineTypeInitializer
TypeBuilder.DefineConstructor
?@newprint:
DefineTypeInitializer
如何创建静态构造函数<代码>定义构造函数创建实例构造函数。@John Skeet谢谢。命名有点混乱
TypeBuilder.DefineStaticConstructor
听起来会更好。@newprint:嗯,它实际上是一个类型初始值设定项-“静态构造函数”是C#术语,而不是CLR术语。根据类是否具有
beforefieldinit
标志,它将根据您的原始代码充当类型初始值设定项,或者根据我的答案中的代码充当静态构造函数。虽然有细微的区别,但这个名字在上下文中是有意义的,我想请原谅我的无知,但我不明白
TypeBuilder.DefineTypeInitializer
TypeBuilder.DefineConstructor
?@newprint:
DefineTypeInitializer
如何创建静态构造函数<代码>定义构造函数创建实例构造函数。@John Skeet谢谢。命名有点混乱
TypeBuilder.DefineStaticConstructor
听起来会更好。@newprint:嗯,它实际上是一个类型初始值设定项-“静态构造函数”是C#术语,而不是CLR术语。根据类是否具有
beforefieldinit
标志,它将根据您的原始代码充当类型初始值设定项,或者根据我的答案中的代码充当静态构造函数。虽然有细微的区别,但这个名字在上下文中是有意义的,我想请原谅我的无知,但我不明白
TypeBuilder.DefineTypeInitializer
TypeBuilder.DefineConstructor
?@newprint:
DefineTypeInitializer
如何创建静态构造函数<代码>定义构造函数创建实例构造函数。@John Skeet谢谢。命名有点混乱
TypeBuilder.DefineStaticConstructor
听起来会更好。@newprint:嗯,它实际上是一个类型初始值设定项-“静态构造函数”是C#术语,而不是CLR术语。根据类是否具有
beforefieldinit
标志,它将根据您的原始代码充当类型初始值设定项,或者根据我的答案中的代码充当静态构造函数。虽然有细微的差别,但依我看,这个名字在上下文中是有意义的。