|
Consider the following codes
using System;
namespace ConsoleApplication1
{
interface IPointD
{
double X {get; set;}
double Y {get; set;}
}
struct PointD : IPointD
{
private double x;
private double y;
public PointD(double x, double y)
{ this.x = x; this.y = y;}
public double X
{
get { return x; }
set { x= value; }
}
public double Y
{
get { return y; }
set { y = value; }
}
}
class Class1
{
static void Method(IPointD point)
{
if (point != null)
{
point.X = 10;
point.Y = 10;
}
}
[STAThread]
static void Main(string[] args)
{
PointD point = new PointD(1, 1);
IPointD dPoint = (IPointD)point;
Method(dPoint);
Console.WriteLine("X = {0}, Y = {1}", point.X, point.Y);
Console.WriteLine("X = {0}, Y = {1}", dPoint .X, dPoint.Y);
}
}
}
Why is the dPoint modified, but "point" is not in the call to Method?
Does the cast
IPointD dPoint = (IPointD)point; creates a copy of the "point"?
Best regards,
Paul.
Jesus Christ is LOVE! Please tell somebody.
|
|
|
|
|
Because point is an object of structure and dPoint is an object of interface
The difference is Structure are by value and class/interface object are by reference.
In C#, classes and structs are semantically different. A struct is a value type, while a class is a reference type.
Sanjay Sansanwal
www.sansanwal.com
|
|
|
|
|
Thanks for the response.
I understand the basics of structs and classes in C#, so this does not really answer my question.
Best regards,
Paul.
Jesus Christ is LOVE! Please tell somebody.
|
|
|
|
|
Paul Selormey wrote:
Why is the dPoint modified, but "point" is not in the call to Method?
Interfaces provide a binding contact, thus the object inheririting from the interface is required to implement whatever the interface defines. This is what allows your cast above to IPointD to succeed. dPoint is simply making its calls through your point object. Does this make sense?
- Nick Parker My Blog | My Articles
|
|
|
|
|
Thanks for the response and the information. Yes, it makes sense.
I got this from the dotnet newsgroup, which confirms what I was suspecting:
Yes. IPointD dPoint = (IPointD)point; -> causes boxing (because point is
value type and it is assigned to an interface type), which acutally makes a
copy of point variable on to the managed heap. The copy is then referenced
by dPoint.
My problem was, since the PointD actually implements the IPointD , boxing should not occur there.
Best regards,
Paul.
Jesus Christ is LOVE! Please tell somebody.
|
|
|
|
|
Hi all,
I have 3 ArrayList, each of them stored some string color name, I want to ask how can I check any duplicated strings between them?
Ofcourse, I can load all strings from one arrayList, and then use ArrayList.Contains(string) to check. however, any fast way to check this ??
Can I only use ArrayList.Contains() to compare with other ArrayList directly?
Thanks for help~~
|
|
|
|
|
hi,
ArrayList impliments few interfaces like IList,ICollection,IEnumerable,ICloneable by default. Suppose if you want to compare
the element of arraylist you need to impliment IComparer interface. This contain one abstract method called Compare.
**************************
S r e e j i t h N a i r
**************************
|
|
|
|
|
azusakt wrote:
however, any fast way to check this ??
If you want fast lookups and have unique elements, I suggest you use a Hashtable instead
top secret xacc-ide 0.0.1
|
|
|
|
|
azusakt wrote:
I have 3 ArrayList, each of them stored some string color name, I want to ask how can I check any duplicated strings between them?
first off - why do you have 3 arraylist which seem to be related to eachother - wont 1 suffice?
azusakt wrote:
Ofcourse, I can load all strings from one arrayList, and then use ArrayList.Contains(string) to check. however, any fast way to check this ??
Can I only use ArrayList.Contains() to compare with other ArrayList directly?
you might consider changing your datastructure to something that provides constant time mechanisms.. an arraylist is basic - some of the operations performed on it - (i think ) are not necessarily constant time complexity. how about something that using a hashing function of some sort ? like for example if you were to have 3 hashtables you could simply do a containskey which is constant time on thme ...
you might want rethink what you are doing though - can you suffice with just 1 and then pass a reference to the remain parts of your program that require this datastructure?
Danny!
|
|
|
|
|
Hi,
I'm writing a C# windows forms application. I've a strange problem in this. Some times, I'm not able to close my appl in the following ways :
1. by clicking on the close button of the form.
2. by clicking on the tool bar button, which calls this.Close();
3. by clicking on the Close option on the menu which you get when you right click on the taskbar/application's icon.
In other words, the only way I could close the application is by terminating from the task manager. This makes me crazy. Please help me...
Cheers
CNU
|
|
|
|
|
Are you running any thread or anyother process in your form? Its seems your form is busy waiting for someother process to complete
Sanjay Sansanwal
www.sansanwal.com
|
|
|
|
|
I've some other threads running in my form. But in Form's Dispose method I stop the thread, if it is still running, close the database connection.
My application has some chid forms, which in turn may open some other child forms. But, before I close main form, all of them will be closed (bcoz, they are all Model forms).
|
|
|
|
|
hi,
Make sure whether you are not doing anything in OnClosing event of your form.
protected override void OnClosing(CancelEventArgs e)
{
try
{
DialogResult r;
r = MessageBox.Show("Do You Want To Close This Module?", "Quiting",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if(r == DialogResult.No)
{
e.Cancel = true;
base.OnClosing (e);
}
else
{
e.Cancel = false;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(),"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
**************************
S r e e j i t h N a i r
**************************
|
|
|
|
|
No, I am not doing any thing in OnClosing(). But what makes me crazy is everything else in the application works fine i.e. all the controls are responding as usual, I can open child forms etc. Only the appl cannot be closed.
|
|
|
|
|
hi,
Try to use Application.Exit() method for closing the application
**************************
S r e e j i t h N a i r
**************************
|
|
|
|
|
hi,
If cnu is using somethred and it is not completed on the time of dispose then your will get a "Application Communication Error". Nothing else. So here we can't assume that this problem is because of thred.
**************************
S r e e j i t h N a i r
**************************
|
|
|
|
|
Like the others, I also think you have a dangleling thread somewhere. Make sure the thread can exit exit properly from its loop, or use the ThreadPool for "fire and forget" threaded ops.
Best bet lies here: As soon as it happens, break the debugger and inspect all running threads (and make sure u name your threads!).
HTH
top secret xacc-ide 0.0.1
|
|
|
|
|
Hi!
I've experienced a similar effect while experimenting with a docking framework and then, later, in one of my own programs as well.
IIRC, the effect was produced by removing a control from its parent form while this control had the focus.
I just tried it out, but can't reproduct the effect now. Might be due to .NET 1.1 or .NET 1.0 SP2 (I tried both runtime versions to no avail).
But I know the problem WAS in there because there still is a workaround in my code (an invisible button receiving focus (via this.ActiveControl=myButton) befor removal of child controls).
Are you removing controls at runtime?
mav
|
|
|
|
|
Yes...I add and remove controls at run time...
Is this the problem ?? So, if I unselect the control (just in case it has the focus) before removing, can it solve the problem?
Cheers
CNU
|
|
|
|
|
Most likely, yes.
Add an invisible button to your form and before calling myForm.Controls.Clear() or Remove() or RemoveAt() set the active control to this button: myForm.ActiveControl=invisButton .
I think this also is relevant when you're removing controls from panels on this form.
You can also try .NET Framework 1.0 ServicePack 2 or .NET 1.1.
mav
|
|
|
|
|
Hi,
anybody knows how to convert .pwi to image?
is there any component available?
thanks
|
|
|
|
|
|
Pocket Word files
|
|
|
|
|
khchan wrote:
Pocket Word files
Ahh, sorry, the best I can think of it to use a digital camera
top secret xacc-ide 0.0.1
|
|
|
|
|
Greetings CP!
Well - it appears I've been presented with a roadblock and cant seem to find the problem.
Heres the situatio.
Ive created an app that has to scann 16000+ servers - for now - all that has to be done is connect and send and receive once asynchronously.
I am able to get the entire process down - the problem that occurs is that at random times the app just halts.
It just stops connecting to the servers - no exceptions thrown - no nada. Its not a threading problem - unless its a bug in the threadpooling for asychronous socket communications.
To draw out some broad strokes about the current scenario
Classes
MainForm applications main form
ConnectionState stores connection information
- buffer
- socket
- server hostname
- start time / end time / elapsed time
ConnectionManager this object is used in the main form (connection
state is not accessed directly)
- i start the process with a method called
CheckServers() which is passed to a ThreadStart object
in the main form for a Thread object named worker
- the worker thread is started and is set to a
background thread from the main form
MessageEventHandler a delegate used to pass the messages from the buffer
to controls on the main form
I know this is a somewhat complicated issue to deal with over these forums.. but - i have traced every aspect of my code - 2-3 days spent in the debugger watching everything and still no luck.
Any suggestions?
Danny!
|
|
|
|