|
Hi everyone
I'm still quite new to Object Oriented Programming, so please forgive me for this newbie question.
I'm building an application with a main form and a couple of sub-forms. There is also an assocated service that goes with the application.
- Should the class library only code that doesn't deal directly with processing events on the forms, or just methods that are used more than once?
- Should each form then have its own class library, or should I create a single class library for the whole application and the service to use?
- Or should I be creating separate class libraries based on their usage to enable later reuse of the class library?
I've trawled through MSDN and found some best practices but they don't mention what to do in the above scenarios... I gotta say I'm leaning towards the last point here, but I really don't know...
Any help you gurus can provide would be greatly appreciated!
Cheers
Paul
One day I want to be a code monkey. Right now, I'm more like a code amoeba...
|
|
|
|
|
Poolee wrote: Or should I be creating separate class libraries based on their usage to enable later reuse of the class library?
Bingo!
/ravi
|
|
|
|
|
Ok, thanks Ravi.
But what about methods purely related to doing something related to the form, but doesn't fall into a particular category? Should I be keeping those with the form class's code?
Cheers
Paul
One day I want to be a code monkey. Right now, I'm more like a code amoeba...
|
|
|
|
|
Yes. If you think the methods could be used by more than one form, you may want to encapsulate them in a utility class.
/ravi
|
|
|
|
|
Awesome, thanks for your help Ravi!!
Cheers
Paul
One day I want to be a code monkey. Right now, I'm more like a code amoeba...
|
|
|
|
|
Hello,
I have a doubt in Inheritance. Can you help me?
I have a baseclass "common" with 3 child classes child1,child2,child3
I have another base class "state" with its 3 child classes state1, state2, state3.
I have a function named xyz() in all the 3 childclasses of "common", which I want to move to the parent class common.
The function xyz( ) in child1 uses the class state1 inside the function, creates object for state1.
The function xyz( ) in child2 uses the class state2 and creates object for state2.
The function xyz( ) in child3 uses the class state3 and creates object for state3.
The function xyz() is same, that is, repeated in all of the 3 childclasses, the only difference is usage of classes state1, state2, state3.
In this case how can I move this xyz() function into the base class "common", so that all the 3 child classes can access the function from the parent class...
I am unable to receive state1, state2 or state3 selectively as argument for the function xyz() at the baseclass "common", depending upon which child class (child1,child or child3) calls this function. Passing the baseclass "state" in place of state1, state2, state3 does not work as the child classes contain additionaly required variables not present in "state".
Is it necessary that I have to use Generic Inheritance....
can throw some light on it?
with best regards
Karthik
|
|
|
|
|
Hello everybody .... any help with my question? ... Thanks in advance.
Karthik
|
|
|
|
|
I almost didn't answer you because at first glance, I thought you had an answer already. Help on this site is free. Especially on weekends, it's not always fast, it can be, but you just need to wait, so long as your question is visible, this sort of post doesn't really help.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
I am having trouble folloowing this.
I *think* what you need to do is write code in the base class like this:
class common
{
public void xyz(state s)
}
then in your derived classes do this:
class child1
{
public override void xyz(state s)
{
state1 state = s as state1;
if (state != null)
{
// interact with it
}
else
{
// do whatever you want when the state is not the type you hoped for
}
}
}
Having a pair of class heirarchies that are so tightly coupled makes me wonder if the state should be a property of the base class, instantiated as the right type in the derived class, and accessed from the childx class.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Dear Mr. Graus,
Thanks for ur reply. Actually, the function xyz() is presently located in the three child classes child1, child2 & child3 and working alright. What I want to do is, to move this xyz() function into the base class "common", so that all the 3 child classes can access the function from the baseclass.
When I have physically moved the function xyz() to the "common" baseclass, the child classes child1, child2 & child3 would have no problem calling this function in the baseclass and pass the appropriate class (that is, one of state1, state2 or state3) as argument, depending on who is calling the function. But the problem arises when I try to create the objects of the class state1 or state2 or state3 inside the xyz() function in the baseclass.
for example, If I create object for state1 inside the Function, it will work only for state1 but will not work for state2 or state3 as arguments, called from child2 or child3 respectively. How can I write a code in the baseclass that accepts any one of state1, state2 or state3 as arguments?
Thanks for your reply and help.
Greetings,
Karthik
|
|
|
|
|
karthikde1980 wrote: How can I write a code in the baseclass that accepts any one of state1, state2 or state3 as arguments?
You can do one of two things
1 - provide three methods that take the three derived objects
2 - use the one method that takes the base, and use the 'as' keyword in the manner I showed you to work out which it is. But again, if you need to do this, then your design is probably broken. So any of the three derived classes could be used as parameters in any of the three derived classes that impliment xyz ? I think you need to work on making your base class work so that it's interface works for all three derived objects, so you don't need to work out which it is.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
HI,
im tring to send and receive Msg in TCP/IP
i have the Sockets on both sides
the problems begins when i call the BeginReceive (...) Method
While in Debug every thing looks fine all the Msg arrives
(the other sends let say : 100 Msg under a For Stat)
but when i run the Exe only the last Msg Arrives
Any Idea
Have Fun
Never forget it
|
|
|
|
|
Could we see some code please?
Kristian Sixhoej
"Failure is not an option" - Gene Kranz
|
|
|
|
|
this is the main BeginReceive function
the OnReceive does just server.EndReceive
server/client = new Socket(AddressFamily.InterNetwork,<br />
SocketType.Stream,<br />
ProtocolType.Tcp);<br />
<br />
<br />
server.BeginReceive(buffer, <br />
0, <br />
1024, <br />
SocketFlags.None, <br />
new AsyncCallback(OnSend), <br />
null);<br />
<br />
while in the client that sends all the info has : <br />
<br />
<br />
client.BeginSend(buffer, <br />
0, <br />
1024, <br />
SocketFlags.None, <br />
new AsyncCallback(OnSend), <br />
null);
and there is the :
<br />
for(int i=0;i<100;i++)<br />
{<br />
SendMessage();
}<br />
When i Debug in the SendMessgae() i see the Message sends
and chech in the compute next to me (Agagin in debug)
that the server has come to where :
server.BeginReceive(buffer, <br />
0, <br />
1024, <br />
SocketFlags.None, <br />
new AsyncCallback(OnReceive), <br />
null); and indid it comes and the Msg Arrives into the buffer
BUT in Exe only the last Msg is recievd
Have Fun
Never forget it
|
|
|
|
|
Try putting it in a do while loop like this:
do
{
server.BeginReceive(buffer, 0, 1024, SocketFlags.None,
new AsyncCallback(OnReceive), null);
} while (server.BeginReceive() != null);
I'm not sure if the code above will work, but try it out.
EDIT: If you know the number of messages - like you do in this case - you could do this:
for (int msg = 0; msg <= 100)
{
server.BeginReceive(buffer, 0, 1024, SocketFlags.None,
new AsyncCallback(OnReceive), null);
}
Kristian Sixhoej
"Failure is not an option" - Gene Kranz
modified on Saturday, December 08, 2007 1:18:44 PM
|
|
|
|
|
THANKS
it did'nt work
but THANKS anyway
i'll try to start from the begining
Have Fun
Never forget it
|
|
|
|
|
Hi how can i get from oledb or sql data reader data to messagebox or a Textbox ?
Can someone gimme an example.
|
|
|
|
|
Don't use the code below but:
someTextBox.Text = (string)someDataReader[0];
Really there are a lot of intermediary steps that need to be taken before something like this can be done in production code.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
<code>
TextBox.Text = DataReader.Get.....(...);
</code>
DataReader.Get... Has : GetString(),GetInt() and so on
while the the parameter in the Get...(...) is the Column number
Have Fun
Never forget it
|
|
|
|
|
Hi how can i get from oledb or sql data reader data to messagebox or a Textbox ?
Can someone gimme an example.
|
|
|
|
|
The problem is that i have a primary key whose dbtype is Bigint i dont want to keep auto to generate the primary key in sql2000 table by code and return that value. Then when entering next record increment must be made to the previous number and inserted as a primary key
next question is if i delete any resord then how to sort the primary keys in ascending order
sas
|
|
|
|
|
@@Identity will give you the last identity from an insert statement. and SCOPE_Idendity() will give you the last value in an insert in your current scope.
Primary Keys are stored by the database in ascending order, usually, so they will always be sorted. I think what you be asking is for sequential primary keys by changing the identity_seed on a deletion. This is possible with the undocumented SQL 2000 system stored procedures but it is not recommended by MS.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
You should create another column to satisfy your requirements of a contiguous numbering system. A primary key identifies the record and shouldn't change.
I wouldn't want to be dealing with Customer#1234 and then send an update to the database, but it turns out my Customer is now #1233 because someone deleted a record while. Customer#1234 (who is now Customer#1233) would be especially annoyed when his shipment of goods gets sent to the old Customer#1235, who is now Customer#1234. Wow. You can see what I'm getting at already!
|
|
|
|
|
I have an Array arraylist
arraylist.Sort(); sorts the array on character 0-end of each element of the array.
How do I make it sort on the 60th charaacter to the end of each element of the array.
|
|
|
|
|
You could do a bubble sort yourself, its only a few lines of code. You could even make your own little function out of it.
My current favourite word is: Bauble!
-SK Genius
|
|
|
|