2015-03-11 33 views
5

Tôi bắt đầu sử dụng sự phản chiếu trong dự án của mình.Lớp ansi trong C# là gì?

Khi tôi tạo loại và tôi muốn chỉ định TypeAttributes, tôi có hai tùy chọn: AnsiClassClass. Cả hai đều được đặt thành 0 trong enum TypeAttributes.

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

1- gì một ANSI Class (Tôi nhận thấy rằng, nó liên quan đến việc LPTSTR, nhưng tôi không hiểu cũng đủ)?

2- Sự khác nhau giữa AnsiClassClass khi tôi sử dụng Reflection là gì.

EDIT

Dưới đây là một ví dụ về cách xác định các TypeAttributes trong Reflection:

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

Bạn có thể hiển thị một số mã có liên quan? MSDN liên kết có lẽ? Nó [có vẻ] (http://referencesource.microsoft.com/#mscorlib/system/reflection/typeattributes.cs,ada9a877a9d95037,references) phải làm với chuỗi marshaling trong khi mặc dù interop. – CodeCaster

+0

Bất cứ khi nào bạn có câu hỏi như thế này, tài liệu MSDN là một tài nguyên tuyệt vời. 'TypeAttributes' trên MSDN: https://msdn.microsoft.com/en-us/library/system.reflection.typeattributes%28v=vs.110%29.aspx – cubrr

+0

Tài liệu liên quan: https://msdn.microsoft.com /en-us/library/system.reflection.typeattributes(v=vs.110).aspx Các nhận xét chỉ ra rằng phần ansi liên quan đến các định dạng chuỗi (mã hóa). – sisve

Trả lời

3

Tôi có hai lựa chọn: AnsiClass và Class

Không, đó là trực giao. AnsiClass nói với trình soạn thảo rằng tất cả các thuộc tính chuỗi được sắp xếp như các chuỗi ANSI. Các tùy chọn khác trong thể loại đó là:

UnicodeClass 
AutoClass 
CustomFormatClass 

Class chỉ ra rằng họ gõ là, tốt, một class. Lựa chọn duy nhất khác trong nhóm đó là Interface. Thật thú vị, khi bạn nhìn vào các thuộc tính của các kiểu khung, các lớp, các cấu trúc và các giao diện đều có thuộc tính Class, vì vậy tôi không chắc chắn nó được sử dụng cho cái gì.

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

đầu ra:

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

tốt nếu bạn nhìn vào MSDN là nói

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

Property Value

Loại: System.Boolean

true nếu thuộc tính định dạng chuỗi AnsiClass được chọn cho Loại; ngược lại, sai.

Thực hiện _Type.IsAnsiClass

mà là khá ít hơn hữu ích nhưng nếu bạn nhìn vào các StringFormatMask của TypeAttributes Enumeration, bạn sẽ thấy nó có giá trị có thể của {AnsiClass,UnicodeClass,AutoClass,CustomFormatClass}

nên về cơ bản nó thông báo cho trình biên dịch cách giải thích các chuỗi trong lớp như ANSI hoặc Unicode, theo như tôi biết không có tác động lên C# và vb nhưng có thể dẫn đến tất cả các loại vấn đề nếu bạn sử dụng các lớp C++

thấy http://www.codeproject.com/Articles/2995/The-Complete-Guide-to-C-Strings-Part-I-Win-Chara