c структуры



структуры c

Автор ЁаньчеZ задал вопрос в разделе Другие языки и технологии

Чем отличается коренным образом класс от структуры в c# и получил лучший ответ

Ответ от Голый Мужик[гуру]
class C { public int Value { get; set; } public C(int value) { Value = value; } } struct S { public int Value { get; set; } public S(int value) { Value = value; } } static void Main() { var a = new C(1); var b = a; b.Value = 2; Console.WriteLine(a.Value == b.Value); var x = new S(1); var y = x; y.Value = 2; Console.WriteLine(x.Value == y.Value); } Это раз. Второе. Память для а выделяется в динамической памяти (управляемой куче) , память для x и y - на стеке. Отличие проявляется при объявлении массивов объектов var array = new S[100] - все сто элементов будут расположены на стеке, а это работает быстрее. В связи с данной особенностью массивов структур вы не можете переопределить или скрыть конструктор без параметров (впрочем, это ограничение C#, а не .NET). Кроме того, память для экземпляров структур освободится сразу после выхода из метода, в то время как экземпляры ссылочных типов будут дожидаться сборки мусора. Третье. Конкретно в C# к структурам неприминимо наследование (хотя, опять же, сама .NET позволяет объявлять структуры, производные от структур) . Впрочем, структуры могут реализовывать интерфейсы. Четвёртое. Анонимные объекты-значения и оптимизация. S Plus(S left, S right) { new S(left.Value + right.Value); } C Plus(C left, C right) { new C(left.Value + right.Value); } var a = new C(1); var b = new C(2); var c = Plus(a, Plus(a, b)); var x = new S(1); var y = new S(2); var z = Plus(x, Plus(x, y)); Будут созданы четыре экземпляра типа C но три экземпляра типа S. Пятое. class X { public C RefObject { get; set; } } class Y { public S ValObject { get; set; } } var x = new X(); x.RefObject = new C(0); c.Value = 1 - прокатит. var y = new Y(); y.ValObject.Value = 1 - не скомпилируется. надо y.ValueObject = new S(1); Существует также понятие боксинга, забывать о котором также не следует. var n = 1; lock (n) { DoSomething(); } отработает некорректно. Вот они вам вкратце основные отличия, изложенные адекватно вашему желанию искать информацию самостоятельно. Гуглите по персоналии Эндрю Троелсена.

Ответ от Lindemann Лёха[эксперт]
насколько я знаю, в struct члены класса по умолчанию public, а в class всё же private. а из книг вот эту очень уважаю, у меня она в печатном виде даж есть, кстати, там и почитай про структуры и классы побольше) <a rel="nofollow" href="http://ebook

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Чем отличается коренным образом класс от структуры в c#
Структура язык Си на Википедии
Посмотрите статью на википедии про Структура язык Си
Суперсерии хоккей на Википедии
Посмотрите статью на википедии про Суперсерии хоккей
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*