我开始在我的项目中使用反射。
当我创建一个类型并且我想指定TypeAttributes时,我有两个选择:
AnsiClass
和Class
。它们在枚举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
时,Class
和Reflection
之间的区别是什么。
修改
以下是在Reflection中指定TypeAttributes的示例:
TypeBuilder typeBuilder = mbuilder.DefineType("DataRow", TypeAttributes.Public | TypeAttributes.AnsiClass | TypeAttributes.Class);
答案 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