|
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
|
|
|
|
|
Could you show me an example of the few lines of code.
TNX
|
|
|
|
|
Just a simple bubble sort. Say you had an array of numbers ranging from 1 - 10 in any order:
do {
bool Continue;
for(int i=0; i<array.length-1; i++) {
if(array[i] > array[i+1]) {
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
Continue = true;
}
}
}while(Continue);
Of course to start at 60 and go to the end, you would just start int i at 60, rather than 0. If you have something like a string in your array, the string class has methods that compare two strings, so you'd need to check those out.
EDIT:Fixed the code, stupid <
My current favourite word is: Bauble!
-SK Genius
modified on Saturday, December 08, 2007 8:39:46 AM
|
|
|
|
|
Yes it is a string. I have been able to solve the problem by writing the array to a text file unsorted.txt and then doing a DOS sort /+60 usorted.txt > sorted.txt and reading the file back into the array but thats really messy.
I will try to implement your suggestion
TNX
|
|
|
|
|
Write a comparer for the object you are storing int the array. Several of the .NET list objects will take, as a parameter to sort, the comparer to use. In fact, even if you don't pass one the default comparer will likely use your version.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
I have spent a whole day trying to write a comarer and make sence out of MSDN's convoluted instructions but have not been able to get something that compiles and works.
|
|
|
|
|
public class Foo : Comparer<foo> {
private string mMyString = new string('c', 100);
public override int Compare(Foo one, Foo two) {
return one.mMyString.Substring(59).CompareTo(two.mMyString.Substring(59));
}
}
Use System.Collections.Generic.List<foo> as the list.
Also, you may have to vary the code in the Compare method as I did not bother to test it.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
A comparer is pretty simple. It's just a class with a Compare method that works like any other Compare method (like string.Compare for example).
Try this:
class SubstringComparer : IComparer<string> {
private int _offset, _len;
public SubstringComparer(int offset, int len) { _offset = offset; _len = len; }
public override int Compare(string x, string y) {
return string.Compare(x, _offset, y, _offset, _len);
}
}
Array.Sort(myArray, new SubstringComparer(59, int.MaxValue));
modified on Saturday, December 08, 2007 2:31:24 PM
|
|
|
|
|
This is my code that will not compile.
<br />
<br />
<br />
class SubstringComparer : IComparer<string> <br />
{ <br />
private int _offset, _len; <br />
public SubstringComparer(int offset, int len) <br />
{ <br />
_offset = offset; _len = len; <br />
} <br />
public override int Compare(string x, string y) <br />
{ <br />
return string.Compare(x, _offset, y, _offset, _len); <br />
}<br />
}<br />
<br />
private void button13_Click(object sender, EventArgs e)<br />
{<br />
ArrayList arraylist = new ArrayList();<br />
for (int i = 0; i < listBox1.Items.Count; i++)<br />
{<br />
string temp = listBox1.Items[i].ToString();<br />
if (temp.Length>65)<br />
{<br />
arraylist.Add(temp);<br />
}<br />
}<br />
Array.Sort(arraylist, new SubstringComparer(59, int.MaxValue));<br />
listBox1.Items.Clear();<br />
for (int i = 0; i < arraylist.Count; i++)<br />
listBox1.Items.Add(arraylist[i]);<br />
}<br />
}<br />
TNX for the help
modified on Saturday, December 08, 2007 10:45:32 AM
|
|
|
|