c# различия между классом и типом?

219
28 января 2018, 00:03

Правильно ли я понимаю: каждый класс это совокупность типов, а каждый тип это либо класс либо структура?

Answer 1

Согласно официальной спецификации языка, типы в C# делятся на

  • типы-значения — это структуры и перечисления (enum),
  • ссылочные типы — это классы, а также массивы, интерфейсы и делегаты,
  • типы-параметры — это типы, являющиеся параметрами обобщённых классов и методов (они не являются ни типами-значениями, ни ссылочными типами, и живут по особым правилам), и
  • типы-указатели (которые могут появляться лишь в unsafe-коде).

Каждый класс, в свою очередь, определяет структуру данных (не путать с struct!), содержащую

  • данные-члены: константы и поля,
  • функции-члены: методы, свойства, события, индексаторы, операторы, конструкторы объекта, деструкторы-финализаторы и статические конструкторы, и
  • вложенные типы.

Таким образом:

  1. Класс не есть совокупность типов, а лишь определение для структуры данных-экземпляра (он же объект) типа. Определение содержит именованные и неименованные данные-члены, функции-члены и вложенные типы.
  2. Типами, кроме классов и структур, являются ещё и перечисления, массивы, интерфейсы, делегаты, типы-параметры и указатели.
Answer 2

каждый класс это совокупность типов

На уровне данных вы почти верно написали.

Есть три поправки.

  1. Класс это не просто совокупность типов, а совокупность типов каждому из которых соответствует своё имя - поле класса.

  2. Кроме того в классе могут быть определены функции, и метаинформация (смотрите атрибуты, рефлексия).

  3. Каждой переменной, функции и самому классу соответсвуют свои модификаторы (доступа: public, private, protected, internal, есть ещё и другие, static, virtual, abstract...).

а каждый тип это либо класс либо структура

тут вы верно написали, единственное что можно добавить что есть ещё делегаты, но на уровне реализации они тоже классы.

READ ALSO
Работа с массивом чисел на c#

Работа с массивом чисел на c#

Я не могу решить 2 задачки по программированию, не понимаю как это сделать

199
Служба с графическим интерфейсом

Служба с графическим интерфейсом

Возможно-ли сделать у службы по таймеру, чтобы каждые 10 секунд показывался MessageBox? Или в службе никак не сделать хоть какие сообщения с графическим...

156
Генерирование версии программы

Генерирование версии программы

Можно ли сделать так, что бы в Caption формы при каждой компиляции программы выполнялся автоматический инкремент версии?

147
CefSharp/CefSharp.Offscreen/ChromiumWebBrowser ошибка: System.Exception: “Cef can only be initialized once..”

CefSharp/CefSharp.Offscreen/ChromiumWebBrowser ошибка: System.Exception: “Cef can only be initialized once..”

Хотел параллельно создать и поместить в коллекцию несколько браузеров CefSharp/CefSharpOffscreen/ChromiumWebBrowser:

277