2013-06-13 5 views
-1

Я видел много людей, говорящих о наследовании в C#, как примитивные типы, происходят из System.Object, и они некоторое время передают целое число, string ... для объекта в качестве аргументов методам. У меня есть несколько вопросов в голове, которые меня смутили.Является ли System.object примитивным?

1) Является ли System.Object самим примитивным типом?

Согласно моему пониманию полученных классов изощренные версии базового класса class inheritence diagram

2) Как System.Object поймать аргументы (String, Int ..) в методах, как

public void objcttest(object objct) 
{ 
    if(objct is string) 
     var strng = (string)objct; 
} 

3) Что это означает, используя классы, определенные в приведенном выше изображении?

Object objct = new WorkItem(); // how is the object of the base class type instantiated with derived class type 
+0

Это сформулировано довольно смутно ... –

+0

Слишком широкий вопрос. Вы должны разделить их на 3 вопроса (и 2 и 3 здесь уже упоминаются на SO). Чтобы ответить сначала, объект не является примитивным (несколько базовых типов, таких как int, bool и т. Д. - type.IsPrimitive() дает вам это). – nawfal

+0

Найдите учебное пособие по C# и ссылочным типам. –

ответ

6

1) System.Object сам примитивный тип?

No. От Type.IsPrimitive:

Примитивные типы Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, распашные и Single.

Как System.Object поймать аргументы (String, Int ..) в методах, как

Там есть преобразование любого типа, не указатель на object.

как объект типа базового класса создается с Dérivé класса

Это не так. Вы должны различать три вещи:

  • переменной (objct в вашем примере)
  • ссылка (просто способ добраться до объекта)
  • Объекта самого

Значение objct является просто ссылкой. Идея состоит в том, что вы можете преобразовать выражение типа «производный тип» в его базовый тип (или интерфейс, который он реализует), без фактического изменения самой ссылки.

Это в основном корень полиморфизма в .NET - и слишком большая тема для true справедливость здесь; Я настоятельно рекомендую вам прочитать хорошую вводную книгу на C#, чтобы получить хорошее обоснование.

+1

Я не знаю, как вы получите действительно хорошие ответы - хотя вопрос отстой. –

+0

@skeet спасибо, но тогда мы говорим, что int, string являются производными System.object, поскольку они примитивны. –

+0

@Irfan: Ну, 'string' не является примитивным для начала (см. Список). Но они являются типами ценностей. Более того, они могут быть * преобразованы * в 'System.Object' через бокс, и они тоже наследуют участников. Но вы должны действительно посмотреть, как хранятся типы значений и ссылочные типы. Я рекомендую читать CLR через C#. –

Смежные вопросы