Есть ли слово, которое охватывает «классы» и «структуры»? - PullRequest
2 голосов
/ 13 февраля 2012

Классы и структуры в C # имеют несколько общих характеристик:

  • они могут быть созданы (при отсутствии ограничений наоборот, как с абстрактными и статическими классами)
  • они могут содержать реализации методов и свойств
  • автор типа определяет поля экземпляра типа

Мы часто используем «класс» и «структура», чтобы различать «ссылочный тип» и «тип значения», но иногда полезно рассмотреть оба типа типов. Кроме того, «ссылочный тип» также включает интерфейсы и делегаты, которые не являются классами. Таким образом, «класс» не означает какой-либо ссылочный тип, он означает «ссылка _ (заполните пробел) _ ».

Например, если объявления ссылок и типов значений были такими:

public sealed class ref String { }
public class val Int32 { }

вместо этого:

public sealed class String { }
public struct Int32 { }

тогда слово "класс" может использоваться для обозначения концепции.

Лучший ответ, который я здесь придумаю, это «конкретный тип», но это может сбить с толку, поскольку он также может относиться к неабстрактному подклассу абстрактного класса.

Есть предложения?

EDIT

Чтобы уточнить, я не ищу слово, которое может в совокупности описать экземпляров классов и структур. Я пытаюсь описать типы классов и типы структур.

Другими словами, если «класс» обозначает набор, который включает в себя System.String, System.FileInfo и т. Д., А «struct» обозначает набор, который включает в себя System.Int32, System.Collections.Generic.List<T>.Enumerator и т. Д., Тогда я ' я ищу слово, обозначающее объединение этих множеств.

РЕДАКТИРОВАТЬ 2

(в ответ на ответ Жордао) Другой способ ответить на этот вопрос - завершить следующее предложение: «Все реализации метода C # должны быть объявлены как члены _ (заполните пробел) _ ».

Ответы [ 6 ]

4 голосов
/ 13 февраля 2012

Обычно я использую термин «тип» для обозначения любого из этих элементов: класса, структуры и даже интерфейсов и перечислений.

Я никогда не чувствовал необходимости говорить исключительно о классах и структурах, я бы, вероятно, просто сказал "класс", а затем дифференцировал их по мере необходимости.

2 голосов
/ 13 февраля 2012

Термин type в C # может относиться к любому из:

  • Типы ссылок
    • object, dynamic и string
    • Типы классов
    • Типы интерфейсов
    • Типы делегатов
    • Созданные типы классов / интерфейсов / делегатов (например, List<string>)
    • Типы массивов
  • Типы значений
    • Типы структур
    • Типы перечислений
    • Простые типы (целочисленные типы, типы с плавающей запятой, decimal и bool)
    • Обнуляемые типы
  • Типы указателей

Все это термины из спецификации C #.

класс, интерфейстипы делегатов, struct и enum также называются type declarations (или: user-definable types).

В зависимости от вашей точки зрения, вы также можете рассматривать параметры типа и void как типы.

Однако не существует специального термина для «классов или структур».На языке спецификации C # можно сказать:

Все реализации метода C # должны быть объявлены как члены объявления class или struct.

1 голос
/ 13 сентября 2012

Я понимаю, что на этот вопрос есть выбранный ответ, но я думаю, что могу предложить новое понимание, которое все еще будет полезно:

Я думаю, что слово, которое вы ищете, может быть Модель . Этот термин используется для обозначения нескольких разных вещей в CS, но статья в Википедии для математическая модель описывает мою интенцию.

В этом контексте модель - это описание системы на некотором мета-языке . Система может быть полностью выражена в терминах ее трех частей: структуры; поведение; и взаимосвязанность. Классы .NET и структуры .NET совместимы с этим определением. Интерфейсов нет, потому что поведение не определено. Вы можете указать только структуру вызовов методов и объявлений членов, а также типовые контракты для операций (взаимосвязанность). Перечисления могут или не могут быть совместимы с этим определением, но, как наиболее часто используемые не являются, потому что они, как правило, не выражают поведение. Исключением являются перечисления, для которых побитовые операции являются достаточными представлениями значимых операций над множествами. С этим предварительным условием я считаю справедливым классифицировать перечисление наряду с классами и структурами.

В качестве примечания, как интерфейсы, так и стандартные перечисления могут рассматриваться как системы сами по себе, если методы расширения интерпретируются как присущие типам, которые они расширяют. Однако ни компилятор, ни я не считаем методы расширения внутренними по отношению к типу первого операнда. Более точная интерпретация будет состоять в том, чтобы рассматривать перечисление / интерфейс и метод расширения как необходимые компоненты системы. Разница между этими компонентными типами, которые являются расширенными, и перечислением class / struct / special-case является то, что перечисление class / struct / special-case является самой системой и, следовательно, подсистемой, содержащей ее. system, тогда как тип component является компонентом, но не системой сам по себе.

Вероятно, стоит пояснить, что согласно этой интерпретации термин модель аналогичен типу, тогда как термин system аналогичен экземпляру. Система может также применяться к большему составу, такому как сборка, но вопрос не в этом.

Оператор "Все реализации метода C # должны быть объявлены как члены модели ", похоже, работает. Это также логически не влечет за собой то, что «все модели могут содержать пользовательские реализации методов», поэтому мы в безопасности в особом случае теоретико-множественных перечислений. Это также будет работать в случае, когда моделируемая система является композицией реализаций и интерфейсов метода статического расширения.

1031 *

1 голос
/ 13 февраля 2012

Это должен быть термин Microsoft. Источник этих понятий - C ++, где структуры - это просто классы, все члены которых являются открытыми. Итак, Microsoft приготовила несколько новых решений, смешав некоторые из C, C ++ и Java. Таким образом, они должны изобрести также условия.

Microsoft обозначает их все как «типы», которые могут быть «значением», «ссылкой» и «указателем»: http://msdn.microsoft.com/en-us/library/3ewxz6et(v=vs.100).aspx

Но эти понятия объединяют не только структуры и классы.

Таким образом, если придумать какой-нибудь нестандартный термин, мы можем взять его, например, из языка Паскаль, где это «запись». Или отсюда можно придумать несколько других терминов: http://en.wikipedia.org/wiki/Object_composition

1 голос
/ 13 февраля 2012

Я считаю, что это псевдо-обсуждение. Пункт № 3 можно сказать и о перечислениях и интерфейсах, а пункт о подклассах абстрактных классов, не вписывающихся в смесь, я просто не понимаю. Я думаю, что ваше собственное предложение о «конкретных типах» в порядке, но, возможно, вы просто хотите поговорить о них как о классах и структурах, о, подождите, но за исключением подклассов абстрактных классов и классов, реализующих интерфейсы, Причина, по которой нет термина для того, что вы ищете, может заключаться в том, что это не очень полезная концепция сама по себе.

EDIT:

Все реализации метода C # должны быть объявлены как члены класса или структуры .

0 голосов
/ 13 февраля 2012

И классы, и структуры являются типами, которые определяют объекты. Они являются строительными блоками внутри объектно-ориентированного языка программирования. Вы можете смоделировать их обоих, используя UML или другой высокоуровневый объектно-ориентированный язык моделирования. Выбор между одним или другим является деталью реализации.

...