Здравствуйте, Аноним, Вы писали:
А>хто-небудь может обьяснить разницу между стуктурой и классом? А>(кроме невозможности наследовать классы и того, что структуры — value types)
Здравствуйте, <Аноним>, Вы писали:
А>хто-небудь может обьяснить разницу между стуктурой и классом? А>(кроме невозможности наследовать классы и того, что структуры — value types)
хотел сказать невозможность наследовать структуры?
Здравствуйте, <Аноним>, Вы писали:
А>хто-небудь может обьяснить разницу между стуктурой и классом? А>(кроме невозможности наследовать классы и того, что структуры — value types)
Структура — это вэлью-тип.
... << RSDN@Home 1.1.2 beta 1 >>
Re[2]: struct vrs class
От:
Аноним
Дата:
07.12.03 23:13
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Структура — это вэлью-тип.
это понятно, я не понял
Careful programmers can sometimes enhance performance through judicious use of structs. C# Language Specification
1.8 Structs
Здравствуйте, <Аноним>, Вы писали:
А>Careful programmers can sometimes enhance performance through judicious use of structs. А>C# Language Specification А>1.8 Structs
Структура небольших размеров (из нескольких полей) передается гораздо быстрее аналогичного класса.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, <Аноним>, Вы писали:
А>>Careful programmers can sometimes enhance performance through judicious use of structs. А>>C# Language Specification А>>1.8 Structs
U>Структура небольших размеров (из нескольких полей) передается гораздо быстрее аналогичного класса.
эээ....класс вообще по ссылке передаётся — куда уж быстрее
Здравствуйте, <Аноним>, Вы писали:
ВВ>>Ну а что быстрее работает стек или куча?
А>Вы не можете отличить процесс создания объекта от его передачи как параметр ?
Спьяну не могу
ЗЫ. А ты вот подумай, может под повышением производительности имелось в виду именно создание..
... << RSDN@Home 1.1.2 beta 1 >>
Re[3]: struct vrs class
От:
Аноним
Дата:
08.12.03 22:27
Оценка:
Обьясните следующее:
If Point is instead implemented as a struct, as in
struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
then only one object is instantiated—the one for the array. The Point instances are allocated in-line within the array. This optimization can be misused. Using structs instead of classes can also make an application run slower, or take up more memory, as passing a struct instance as a value parameter causes a copy of the struct to be created. There is no substitute for careful data structure and algorithm design.
Re[8]: struct vrs class
От:
Аноним
Дата:
09.12.03 06:15
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, <Аноним>, Вы писали:
ВВ>>>Ну а что быстрее работает стек или куча?
А>>Вы не можете отличить процесс создания объекта от его передачи как параметр ?
ВВ>Спьяну не могу
ВВ>ЗЫ. А ты вот подумай, может под повышением производительности имелось в виду именно создание..
А что мне думать над явно сформулированным вопросом Если было бы сказано про создание — ответ был иным, а так, философию разводить...Брррр... А некорректно заданный вопрос — проблема задающего этот вопрос...
Re[9]: struct vrs class
От:
Аноним
Дата:
09.12.03 06:17
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>Здравствуйте, <Аноним>, Вы писали:
ВВ>>>>Ну а что быстрее работает стек или куча?
А>>>Вы не можете отличить процесс создания объекта от его передачи как параметр ?
ВВ>>Спьяну не могу
ВВ>>ЗЫ. А ты вот подумай, может под повышением производительности имелось в виду именно создание.. А>А что мне думать над явно сформулированным вопросом Если было бы сказано про создание — ответ был иным, а так, философию разводить...Брррр... А некорректно заданный вопрос — проблема задающего этот вопрос...
Гм.Это в той ветке, где Вы ответили — общая мысль потекла именно в направлении передачи как параметров экземпляров классов и структру. А первопричина — иная
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; // okthis.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 0this.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)
> А что мне думать над явно сформулированным вопросом Если было бы сказано про создание — ответ был иным, а так, философию разводить...Брррр... А некорректно заданный вопрос — проблема задающего этот вопрос...