Другие языки программирования и технологии

Чем отличается коренным образом класс от структуры в 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();
}
отработает некорректно.

Вот они вам вкратце основные отличия, изложенные адекватно вашему желанию искать информацию самостоятельно.

Гуглите по персоналии Эндрю Троелсена.
ОП
Отделвнутренней Политики
9 617
Лучший ответ
насколько я знаю, в struct члены класса по умолчанию public, а в class всё же private.
а из книг вот эту очень уважаю, у меня она в печатном виде даж есть, кстати, там и почитай про структуры и классы побольше)
Гуд книга по C#
Алексей Пивкин дааа, ну чувак ниже и отписался....просили ведь КОРЕННЫМ образом хД
а про public и private вообще ни слова сказано не было, почти всё ни о чём)
Алексей Пивкин 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);
}

Это раз.

и что ты этим хотел показать? какое из различий? просто интересно. не нада тут ругаться