Solved

500pts: Which methods to implement in a class by default i.e ToString()?

Posted on 2006-11-29
7
182 Views
Last Modified: 2010-04-16
Hi there,

I was looking for some b ackground info on what methods i should be implementing by default in my classes (or overriding)...

I remember seeing a document once outlining best practises ... what to override, what interfaces to use if you wish to use a foreach on your class etc... but i just can't find it...

I was wondering if anyone has any recommendations of what methods / properties I should be implementing /overriding by defautl?

Also currently i am always using and awful lot 'private' access modifiers on classes... should i really be using protected so it can be picked up in another class/derived class... i suppose this depends,, but it was just concerning me that all my classes contain private members etc

Look forward to any information..

Thanks in advance

Ian
0
Comment
Question by:ianinspain
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 48

Expert Comment

by:AlexFM
ID: 18035294
By default, ToString returns type name. If you want to replace this with something helpful, override ToString.
All other depends on your requirements. If class should be serializable, implement ISerializable interface. If class is some collection wrapper, implement INumerable interface. If class allocates some unmanaged resources, or has IDisposable members, implement IDisposable interface.

If you don't want this class to be inherited, make it sealed, and make all non-public method private.
If you want to allow inheritance, don't use sealed. Decide, which methods you want to be inherited, and make them protected.
0
 
LVL 14

Expert Comment

by:existenz2
ID: 18041048
Basicly you don't need to override any class by default. If you aren't using the ToString() method, don't bother overriding it.

For the rest it's basicly what AlexFM says. However I would add that you should implement IDisposable also when the object can contain a lot of data. That way it gets cleaned a bit quicker when you call the Dispose() method.
0
 
LVL 30

Assisted Solution

by:anarki_jimbel
anarki_jimbel earned 150 total points
ID: 18041479
about private, protected etc. modifiers.

There are good reasons to use them all, again, it depends on your needs and requirements. It's a common practice to have private fields and access them through public properties. If you need to extend some classes you still may have private fieldsin them and access them through public properties. In some other situations protected comes quite handy...
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 48

Accepted Solution

by:
AlexFM earned 200 total points
ID: 18043326
>> you should implement IDisposable also when the object can contain a lot of data.
There are two reasons to implement IDisposable: class allocates unmanaged resources, or contains disposable members. Lot of data is not a reason. Dispose method doesn't release managed resources, even if there is a lot of them.
0
 
LVL 14

Assisted Solution

by:existenz2
existenz2 earned 150 total points
ID: 18043469
Alex> I agree, wasn't really clear about that. However if you have a very big byte array in your class, you most likely do want to do "data = null;" in the overriden Dispose() method. The data won't be freed right away, but it will get the "clean" flag faster and the Garbage Collector will free it up faster then normally. That's what I meant to say.
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 18043569
Let's say that array belongs to class instance. If class instance has 0 reference counter, it becomes candidate for garbage collecting. At the same time, this array becomes candidate for garbage collecting as well, if it is not referenced somewhere outside of class. Array has reference counter 1, but it is referenced only from "dead" instance, so this array is still subject of collecting. Setting array reference to null inside of class reduces array reference counter to 0, but this doesn't change anything.
It is interesting to write simple program which tests this, I will do this some time later. However, this discussion is out of scope of original question.
0
 

Author Comment

by:ianinspain
ID: 18075781
excellent thanks... splitting points..

Ian
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…
This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question