Объясняю:
struct — это просто кусок памяти, фактически аналог *C* struct или что то же POD type в C++, кроме того что оно value класс и может иметь конструктор, функции-члены и все такое прочее, но как и POD класс не может иметь виртуальных функций (так как типа нет наследования). фишка в том, что скомпилированный в native код, value типа копируются memcpy-ом, т.е. movsX командами, что вполне оперативно.
классы же передаются по ссылке, и memcpy-ом не копируются. кроме того на них еще считаются ссылки и всё такое прочее.
разумный выбор struct будет тогда, когда пришлось слишком часто создавать клонов класса, чтобы защитить его от изменения данных, или когда нужно избежать разделения данных.
кроме того если свойство есть структурный тип, то невозможно изменять это свойство иначе как присваиванием переменной того же (структ) типа.
пример:
public class A
{
public struct SType
{
public int Value { get { return value; } set { this.value = value; } }
private int value;
}
public class CType
{
public int Value { get { return value; } set { this.value = value; } }
private int value;
}
public SType S { get { return s; } set { s = value; } }
private SType s;
public CType C { get { return c; } set { c = value; } }
private CType c;
public static void Test()
{
this.C.Value = 0; // ok
this.S.Value = 0; // ERROR SType is value type
SType ss = this.S; // ss is a copy of this.s
ss.Value = 1; // s.Value is still 0
this.S = ss; // ok. now this.s.Value is 1
CType cc = this.C; // got reference
cc.Value = 1; // now this.c.Value is 1
}
}
вот такая разница.
А>хто-небудь может обьяснить разницу между стуктурой и классом?
А>(кроме невозможности наследовать классы и того, что структуры — value types)