Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2016, 20:03   #1
BadCats
Пользователь
 
Аватар для BadCats
 
Регистрация: 31.01.2016
Сообщений: 67
Вопрос разъясните что и как в системе типов CLI (язык C#)

Всем привет имеется следующий код:
Код:
using System;

// Противоречие между системой типов CLI и системой типов C#. 
// (ковариантность массивов типов-значений несогласована)

namespace Covariant
{
    class Program
    {
        static void Main()
        {
            uint[] array = new uint[3];

            Console.WriteLine("array  {0} {1}", array is uint[], array is int[]);

            object @object = array;

            Console.WriteLine("object {0} {1}", @object is uint[], @object is int[]);

            // Delay.
            Console.ReadKey();
        }

который демонстрирует противоречие между ситстеиой типов CLI и системой типов в C#. Я немного почитал об этих системаз, и если вкратце, то понял примерно следующие:
  • CIL- промежуточный язык
  • CLI- набор правил, которые должны соблюдать языки семейства .NET
CLI разделена(система) на 4 категории
  • CTS: Commmon Type System
  • CLS: Common Language Specification
  • Metadata
  • VES: Virtual Extension System
кратко, что я понял об этих 4 категориях:
  • CTS- является определением всех типов данных, поддерживаемых .NET;
  • CLS- является подмножеством CTS; Касается правил написания кода(например регистра сигнатур методов при их перегрузке- в разных языках) Так следующий код в написанный в C# - спокойно скомпилируется:

Код:
public class Foo
{
public void Add()
{
}

public void add()
{
}

}
а аналогичный код переведенный на язык VB.NET - вызовет ошибку компиляции
Код:
Module Foo

Sub Add()

End Sub

Sub add()

End Sub

End Module
  • Metadata- описываю содержимое вашего кода
  • VES- является реализацией части CLI части, обеспечивающей выполнение внешней среды для кода CIL - т.е контролируер преобразование CIL кода в байт-код(двоичный).

Также узнал еще о следующем:
  • CLR- является реализацией всей системы CLI в лице корпорации Microsoft
  • JIT- компилятор управляемы системой VES и транслирующий CIL в двоичный код

Что я хотел узнать при этом обсуждении:
  • Правильно ли я все понял?
и еще я вычитал, что тип uint использованный в данном примере не является CLS совместимым
  • в чем конкретноя проявляется несогласованностть типов CLI и c# ?
  • т.к после ковариантности(UpCast) массива array к базовому типу Object - система CLI стала считать возможным (при проверке ключевым словом is) совместимость типов uint и int. Кто небудь объясните мне на уровне этих систем(системы CLI(включая CTS и CLS) и систеиы типов C#) - почему так произошло?!
BadCats вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать текущий формат даты в системе? (язык С ) Npwas Помощь студентам 1 27.03.2013 19:31
Разъясните начинающему, что такое PHP Mitkin PHP 35 14.09.2012 16:52
Разъясните что требуется dr.Chas Общие вопросы по программированию, компьютерный форум 2 20.05.2011 21:56
Кто, что думает о системе Ананас 0.9.5? Alexei91 Софт 0 04.11.2010 12:07
Что-то на счёт типов и юникода Smusmumriken Общие вопросы C/C++ 7 10.06.2010 10:47