473,796 Members | 2,619 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

struct or class

Hello!

Since struct and class are very similar in C#, I was wondering why using
struct would be better in some situations than using class. Any performance
issues? What about sending struct or class as parameter to function? Is it
by value or reference?

Appreciate any thoughts on this issue!
Best regards,
Jure
Aug 28 '07 #1
9 1719
Since struct and class are very similar in C#
No, struct and class are *very* different in C#; much more so than in
C++.

Jon's pages give a good overview:
http://www.pobox.com/~skeet/csharp/parameters.html
I was wondering why using struct would be better in some situations
than using class
Struct is value-type; class is reference-type. I'd use "different"
more than "better", but yes - in some scenarios it can be marginally
quicker to use a struct, as there is no indirection step to the
managed heap. However, an overweight struct (as an argument) will
typically make things worse rather than better, as the struct is
(normally) cloned (simple memcopy).
What about sending struct or class as parameter to function? Is it
by value or reference?
The type can be value-type of reference-type, and *separately*, either
can be passed by-reference or by-value. All 4 options are possible.

But read Jon's article.

Marc
Aug 28 '07 #2
Read this
http://www.c-sharpcorner.com/UploadF...turesInCS.aspx

--
Sincerely
Yaron Karni
http://dotnetbible.blogspot.com/
"Jure Bogataj" wrote:
Hello!

Since struct and class are very similar in C#, I was wondering why using
struct would be better in some situations than using class. Any performance
issues? What about sending struct or class as parameter to function? Is it
by value or reference?

Appreciate any thoughts on this issue!
Best regards,
Jure
Aug 28 '07 #3
On Aug 28, 10:30 am, Yaron Karni <yaron.ka...@gm ail.comwrote:
Read this
http://www.c-sharpcorner.com/UploadF...uresInCS111120...
Unfortunately it falls down on the second sentence:

<quote>
A C# structure is a value type and the instances or objects of a
structure are created in stack.
</quote>

Structs are sometimes created on the stack, but if they're part of
other classes, they'll be on the heap.

See http://pobox.com/~skeet/csharp/memory.html

Jon

Aug 28 '07 #4
"Jure Bogataj" <ju**********@m ikrocop.comwrot e in message
news:uk******** ******@TK2MSFTN GP02.phx.gbl...
Since struct and class are very similar in C#
In what way(s) are they "very similar"...???
--
Mark Rae
ASP.NET MVP
http://www.markrae.net

Aug 28 '07 #5
Based on that structures can contain many same elements that classes do
(constructors, constants, fields, methods, properties, indexers, operators,
events, and nested types). But I do not have some deeper knowledge about
their memory considerations, layout or usage so I would appreciate any
thoughts or links for that. So to know when to use struct and when to use
class.
For example, I have made a function in C# which accepts structure as input
parameter (structure contains fields for some search filter; I could also
write all parameters inside function, but I rather created structure for
this). Then I've heard that it is better to use class (and that structures
are only usable in an unmanaged code), and didn't quite understand why.
Best regards,
Jure
"Mark Rae [MVP]" <ma**@markNOSPA Mrae.netwrote in message
news:Og******** ******@TK2MSFTN GP06.phx.gbl...
"Jure Bogataj" <ju**********@m ikrocop.comwrot e in message
news:uk******** ******@TK2MSFTN GP02.phx.gbl...
>Since struct and class are very similar in C#

In what way(s) are they "very similar"...???
--
Mark Rae
ASP.NET MVP
http://www.markrae.net

Aug 28 '07 #6
If in doubt (and it sounds like you are), then you should almost
always be using a class. It is relatively unusual to write structs in
..NET - mainly to represent composite values, such as a complex-number,
or a currency/value pair - that type of thing.

You can always make the class immutable if you want value-type-like
semantics - i.e. it can't be edited after being created.

Marc
Aug 28 '07 #7
This is a common source of confusion for C++ developers, since the difference
between struct and class in C++ is miniscule (and you could easily argue that
retaining struct was a mistake in the design of C++).
--
David Anton
http://www.tangiblesoftwaresolutions.com
Convert between VB, C#, C++, and Java
Instant C#
Instant VB
Instant C++
C++ to C# Converter
C++ to VB Converter
C++ to Java Converter
"Marc Gravell" wrote:
Since struct and class are very similar in C#
No, struct and class are *very* different in C#; much more so than in
C++.

Jon's pages give a good overview:
http://www.pobox.com/~skeet/csharp/parameters.html
I was wondering why using struct would be better in some situations
than using class
Struct is value-type; class is reference-type. I'd use "different"
more than "better", but yes - in some scenarios it can be marginally
quicker to use a struct, as there is no indirection step to the
managed heap. However, an overweight struct (as an argument) will
typically make things worse rather than better, as the struct is
(normally) cloned (simple memcopy).
What about sending struct or class as parameter to function? Is it
by value or reference?
The type can be value-type of reference-type, and *separately*, either
can be passed by-reference or by-value. All 4 options are possible.

But read Jon's article.

Marc
Aug 28 '07 #8

"Marc Gravell" <ma**********@g mail.comwrote in message
news:OL******** ******@TK2MSFTN GP05.phx.gbl...
>Since struct and class are very similar in C#
No, struct and class are *very* different in C#; much more so than in C++.

Jon's pages give a good overview:
http://www.pobox.com/~skeet/csharp/parameters.html
>I was wondering why using struct would be better in some situations than
using class
Struct is value-type; class is reference-type. I'd use "different" more
than "better", but yes - in some scenarios it can be marginally quicker to
use a struct, as there is no indirection step to the managed heap.
However, an overweight struct (as an argument) will typically make things
worse rather than better, as the struct is (normally) cloned (simple
memcopy).
When using an array, a struct can be much much much better, as you save the
indirection and also you have perfect locality improving the performance of
the CPU cache. Also the garbage collection cost depends on the number of
live objects and the number of tracking handles, and by using an array of
struct you save both.
Aug 28 '07 #9
When using an array, a struct can be much much much better
Fair enough - but you'd have to be doing some heavy crunching to
really appreciate this (so maybe a math/graphical/financial
application). And of course, in such cases you'd be advised look at
the profiler first - it could still be that this is the 0.5%, and
you'd be better focussing on something that is sucking 40% CPU.

But I take your point.

Marc

Aug 28 '07 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
4657
by: Kilana | last post by:
I see this all the time in code: typedef struct a_struct { ... }differentName, *differentNamePtr; I understand how I can use it, but could someone tell me why the above is
2
11259
by: SACHIN | last post by:
I have this class as part of a Consol application. using System; namespace Bugreport { /// <summary> /// This class tries to use the Class/Struct combination. /// </summary> class Class1 {
4
31580
by: Steve | last post by:
I'll be the first to admit, I'm not entirely clear on the appropriate usage of either. From what I am reading in my books, a Struct and a Class are pretty much the same, with the difference being, a Class can have private and protected members, but a Struct everything is Public by default. I laymans terms what would be an appropriate reason to choose a Struct over a Class? So why would one want to choose a Class over a Struct.
15
9082
by: Steven T. Hatton | last post by:
The following may strike many of you as just plain silly, but it represents the kind of delelima I find myself in when trying to make a design decision. This really is a toy project written for the purpose of learning to work with C++. It therefore makes some sense for me to give the situation the amount of consideration presented below. To be quite honest, I'm amazed at the amount there is to say about such a seemingly simple...
15
3793
by: bugzilla | last post by:
hi,all, I have a C++ program need to convert to c language to be used in a emabedded system. the problem is that the original code was writtern in C++ language with Parent class and some child class. How can I invert these C++ code into pure c code by using struct in C language? Can somebody give me any ideas? thanks. For example, how to conver the following code into pure c code?
3
1919
by: Karl M | last post by:
Hi everyone, I just notice some strange behaviors on the MS C++ compiler regarding struct default constructor, see the example bellow: struct MyStruct { int a; }; class MyClass { public:
4
4030
by: DaHool | last post by:
Hi there !!! I browsed around the Internet in search for a solution of a little difficult problem i have in VB.NET.... However, i cannot find a suitable anwser anywhere, so i thought i'll give it a try here... Okay, here's the deal: I am trying to read from unmanaged memory with a class type struct, this
5
6091
by: jwright | last post by:
I have decided to use a struct to collect my data. The input file is comma dilineated between almost all of the fields. Here is the code I have so far and a sample input and output file. #include <fstream> #include <iostream> #include <iomanip> using namespace std; struct pyrll
1
2268
by: stromhau | last post by:
Hi, I have made a few classes in c++. They somehow cooperate doing some 3d stuff. Basically it is a moving camera acting as a flight, i have placed a lot of objects around the scene together with a b-spline surfcae. The problem class is the polygon class. this class read 3d files generates faces, edges and so on. here are two of the building blocks(structs) struct FACE{
2
2305
by: Ninereeds | last post by:
I'm messing around with using mixin-layers (look for papers by Yannis Smaragdakis and Don Batory) to define data structures. One issue is that nodes tend to have pointers to other nodes - the pointers have to point to the full node type, and have to be referenced before that full node type is known. One solution is to use the 'fixpoint construction' to get an apparent circular dependency... class c_Final : public c_Layer2< c_Layer1...
0
9685
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9533
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10461
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10190
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9057
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7555
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5579
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4122
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
2928
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.