C#中的ansi课程是什么?

时间:2015-03-11 14:24:44

标签: c# reflection reflection.emit

我开始在我的项目中使用反射。

当我创建一个类型并且我想指定TypeAttributes时,我有两个选择: AnsiClassClass。它们在枚举TypeAttributes中都设置为0。

public enum TypeAttributes
{
    //     LPTSTR is interpreted as ANSI.
    AnsiClass = 0,
    //
    // Summary:
    //     Specifies that the type is a class.
    Class = 0,
...

1-什么是ANSI Class(我注意到它,它与LPTSTR有关,但我不太了解?)

2-当我使用AnsiClass时,ClassReflection之间的区别是什么。

修改

以下是在Reflection中指定TypeAttributes的示例:

TypeBuilder typeBuilder = mbuilder.DefineType("DataRow", TypeAttributes.Public | TypeAttributes.AnsiClass | TypeAttributes.Class);

2 个答案:

答案 0 :(得分:3)

  

我有两个选择:AnsiClass和Class

不,那些是正交的。 AnsiClass告诉编组人员将所有字符串属性编组为ANSI字符串。该类别中的其他选项是:

UnicodeClass
AutoClass
CustomFormatClass

Class表示他们输入的是class。该组中唯一的其他选项是Interface。有趣的是,当您查看框架类型,类,结构和接口的属性时,都具有Class属性,因此我不确定它的用途。

 typeof(object).Attributes.Dump();   
 typeof(int).Attributes.Dump();   
 typeof(ICloneable).Attributes.Dump();  

输出:

AutoLayout, AnsiClass, Class, Public, Serializable, BeforeFieldInit
AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, Serializable, BeforeFieldInit
AutoLayout, AnsiClass, Class, Public, ClassSemanticsMask, Abstract

答案 1 :(得分:0)

如果你看看MSDN就好了

https://msdn.microsoft.com/en-us/library/system.type.isansiclass%28v=vs.110%29.aspx

  

物业价值

     

类型:System.Boolean

     

如果为Type选择了字符串格式属性AnsiClass,则为true;否则,错误。

     

用工具   _Type.IsAnsiClass

这不是很有用,但如果你查看StringFormatMask枚举的TypeAttributes,你会看到它的可能值为{AnsiClass,UnicodeClass,AutoClass,CustomFormatClass}

所以基本上它告诉编译器如何将类中的字符串解释为ANSI或Unicode,据我所知,它对c#和vb没有影响但是如果你使用它会导致各种各样的问题c ++类

请参阅http://www.codeproject.com/Articles/2995/The-Complete-Guide-to-C-Strings-Part-I-Win-Chara