C# 如何发出代码,通过调用类的静态字段'来为其赋值/引用;谁的构造函数?
(我的代码有点像C#和VB.NET) 我正在尝试发出如下所示的类: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
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
标志,它将根据您的原始代码充当类型初始值设定项,或者根据我的答案中的代码充当静态构造函数。虽然有细微的差别,但依我看,这个名字在上下文中是有意义的。