2012-08-02 35 views
6

Tôi không thể tìm thấy mối quan hệ giữa các loại này bằng cách sử dụng .Net reflector. Bất kỳ ý tưởng?Nơi để biết/kiểm tra: Int32 kế thừa từ ValueType, ValueType kế thừa từ Object?

+0

Câu hỏi hay, tôi cũng thú vị nhưng tôi nghĩ bạn không thể nhìn thấy nó trong phản xạ khiến chỉ những từ khóa như scruct hoặc enum định nghĩa kiểu làm giá trị cho trình biên dịch. –

+1

@Denis bạn có thể thấy nó trong IL, C# và cây ... –

+0

trình duyệt đối tượng trong VS cũng sẽ cung cấp cho bạn thông tin tương tự ... –

Trả lời

8

Kể từ khi bạn nói "sử dụng Net phản xạ":

enter image description here

Nếu bạn muốn phản ánh:

Type type = typeof (int); 
while(type != null) 
{ 
    Console.WriteLine(type.FullName); 
    type = type.BaseType; 
} 

trong đó cho thấy:

System.Int32 
System.ValueType 
System.Object 

và nếu bạn có nghĩa là IL:

.class public sequential ansi serializable sealed beforefieldinit Int32 
    extends System.ValueType 

và:

.class public abstract auto ansi serializable beforefieldinit ValueType 
    extends System.Object 

(trong phản xạ, chọn nút của loại, và chọn IL như xem)

Nếu bạn có ý nghĩa quan điểm # C, sau đó:

public struct Int32 ... 

Là đủ; từ khóa struct từ khóa có nghĩa là: được kế thừa từ ValueType (mặc dù không hoàn toàn theo cách thông thường của C# class). ValueType vẫn còn là một lớp thông thường, và có:

public abstract class ValueType ... 

và như thường lệ, một class mà không chỉ định một cơ sở loại có nghĩa là: thừa hưởng từ object.

+0

Ý tôi là chế độ xem C#. Everyting là rõ ràng bây giờ. Cảm ơn Marc đã đưa ra các cách tiếp cận khác nhau rất tuyệt vời. – user1033098

+0

+1 để giải thích các cách có thể khác nhau. – Adil