2013-06-28 3 views
3

В настоящее время я читаю C# 5.0 в двух словах и в основах типа (находится в главе 2) Подраздел симметрию предопределенных типов и пользовательских типов вводится термин ...Что означает «симметрия» между предопределенными типами и пользовательскими типами?

... почему автор говорит о симметрии между этими типами? Каков аргумент, что типы симметричны?

Это оригинальный пункт:

красивый аспект C# является то, что предопределенные типы и пользовательские типы имеют несколько отличий. Предопределенный тип int служит в качестве плана для целых чисел. Он содержит данные -32 бита и предоставляет функции, которые используют эти данные, например ToString. Аналогичным образом, наш пользовательский тип UnitConverter действует как схема преобразования единиц измерения. Он содержит данные - отношение - и предоставляет членам функции использование этих данных.

+1

Глава вторая - это не основы типа ... на самом деле не существует главы, называемой базой типов. Номер страницы? Кроме того, такого рода вопросы не для SO. –

+4

@newStackExchangeInstance: в разделе 2 есть раздел *, называемый «Основы типов» (на самом деле p15). Это не так сложно вывести из описания. – Jon

+0

@Jon В редактировании это не так. Раньше говорила глава. –

ответ

5

Смысл текста в том, что все типы на языке «ведут себя как объекты». Например, вы можете сделать это:

int i = 42; 
Console.WriteLine(i.ToString()); // called a method on an int 

так же легко, как вы можете сделать это:

DateTime d = DateTime.Now; 
Console.WriteLine(d.ToString()); // called a method on a DateTime 

То есть, если вы не знаете типы i и d вы не смогли бы вывести что-либо, просто прочитав код, который вызывает .ToString().

Contrast это с языком, как C++:

std::string s = "hello"; 
std::cout << s.length(); 

int i = 42; 
// ...but you cannot invoke any method on i; "ints are special" 

Вот тот факт, что s.length() компилирует говорят нам, что s не является int, или указатель, или любым другим примитивным типа.

Эта однородность не покупает вам ничего с технической точки зрения, но, тем не менее, она приветствуется, особенно если вы просто изучаете язык.

1

Есть языки, на которых вы не можете создать тип, который ведет себя аналогично тому, что встроено, как int. В C# можно создать тип со всеми свойствами 'int' (который является синонимом System.Int32) - тип значения с +/-/= операцией.

I.e. в JavaScript нельзя создать другой тип Array или string. В Java значения типов (are?) Не присутствуют, поэтому тип, эквивалентный 'int', не может быть написан программистом (Does Java make distinction between value type and reference type).

1

Я считаю, что автор считает, что встроенные типы и пользовательские типы предназначены для использования в аналогичных целях; хранить данные и предоставлять механизмы для использования этих данных. Я считаю, что там также есть скрытая ссылка, что как встроенные объекты, так и пользовательские объекты наследуются от System.Object, таким образом, они обладают сходными способностями (то есть ToString()).

Я не обязательно соглашаюсь с термином «симметрия», но это мои два цента на эту тему.